Вопрос или проблема
Я пытаюсь запустить .sh файл на Red Hat 6 и получаю следующую ошибку:
не удается открыть '' для чтения: Нет такого файла или каталога
Скрипт, который я запускаю, ссылается на другие скрипты, находящиеся в той же директории. Я могу их увидеть с помощью ls -la
.
Примечание: Этот скрипт отлично работает на Red Hat 4. У меня есть новая свежая машина с Red Hat 6, на которой я пытаюсь запустить свои скрипты.
Мой скрипт abc.sh
упоминается ниже
fox_comm_server_details.sh
fox_comm_topic_names.sh
fox_comm_sh_tools.sh
Ссылается на другие скрипты (.sh
) файлы.
Когда я запускаю свой abc.sh (с помощью ./abc.sh
), он говорит
`fox_comm_server_details.sh`: не удается открыть [Нет такого файла или каталога]
Я подтвердил, что необходимые скрипты присутствуют в директории, и у меня есть на них разрешения.
Если я обновлю abc.sh
следующим образом:
./fox_comm_server_details.sh
./fox_comm_topic_names.sh
./fox_comm_sh_tools.sh
На этот раз он не жалуется на отсутствующие файлы, но возникает другая ошибка, как указано ниже:
read_fox_comm_servers_list[134]: read_fox_comm_servers_list_defaults[37]: local: не найден [Нет такого файла или каталога]
read_fox_comm_servers_list
и read_fox_comm_servers_list_defaults
– это функции, определенные в fox_comm_sh_tools.sh
, как показано ниже:
function read_fox_comm_servers_list
{
read_fox_comm_servers_list_defaults
read_fox_comm_servers_list_overrides
}
function read_fox_comm_servers_list_defaults
{
local tempfile=/tmp/read_fox_comm_servers_list_defaults.$$
}
И возникает вышеупомянутая ошибка.
Попытка угадать:
пожалуйста, отредактируйте ваш вопрос, нажав по этой ссылке, потому что так действительно сложно понять.
В общем, кажется, что где-то в скрипте (или в подсценарии) переменная не задана с именем файла.
Вы можете заметить это из ''
без имени внутри в вашем сообщении об ошибке
не удается открыть ” для чтения: Нет такого файла или каталога
Вы можете найти, где ошибка, активировав отладку в вашей оболочке
set -x # для активации отладки
./myscript.sh # здесь вызов вашего скрипта
set +x # чтобы остановить отладку
Ответ или решение
Ошибка "cannot open ” for reading: No such file or directory", с которой вы столкнулись при запуске вашего сценария abc.sh
на Red Hat 6, указывает на проблему с ведением файлов или с некорректно установленными переменными в вашем скрипте. Рассмотрим подробно возможные причины и шаги по устранению данной проблемы.
1. Анализ проблемы
Сообщение об ошибке cannot open '' for reading: No such file or directory
подразумевает, что какой-то из файловых путей или переменных в вашем скрипте не установлен и остается пустым. Это может происходить по следующим причинам:
- Переменная, содержащая путь к файлу, не инициализирована.
- Файл, к которому обращается скрипт, не существует.
- Ошибка в пути к файлу, например, использование относительных путей без должного указания местоположения.
2. Проверка переменных и вызовов
Убедитесь, что все переменные, используемые в ваших функциях и вызовах других скриптов, корректно установлены. В вашем случае попробуйте следующее:
-
Запустите отладку вашего скрипта, чтобы отследить, какие именно переменные вызывают ошибку. Добавьте следующие строки в начало вашего скрипта:
set -x # Включает режим отладки
-
Пройдите по коду, чтобы понять, где именно переменные могут не устанавливать значения. Возможно, что в каком-то местах используется использование неожиданного состояния переменной.
3. Убедитесь в наличии и доступности файлов
Проверьте, указаны ли в ваших скриптах правильные пути к другим скриптам. Чтобы убедиться, что файлы действительно находятся в той же директории, можно использовать команду ls -la
, как вы сделали. Однако также проверьте, корректно ли ссылаетесь на эти файлы в abc.sh
. Например, если вы используете относительный путь, убедитесь, что вы запускаете скрипт из нужной директории.
4. Ошибка с local
Когда вы изменили ваш скрипт на использование относительных путей, ошибка local: not found
указывает на то, что интерпретатор не распознает команду local
. Эта ошибка может возникать, если ваш скрипт запускается в несовместимой оболочке или если вы используете синтаксис, специфичный для другой версии bash
. Убедитесь, что файл fox_comm_sh_tools.sh
начинается с правильной шебанг строки:
#!/bin/bash
5. Советы по отладке
-
Запустите
echo
для вывода значений переменных перед их использованием, чтобы увидеть, действительно ли они установлены.echo "Путь к файлу: $tempfile"
-
Чтобы лучше понимать, что вызывает ошибку, проверьте содержимое всех вызовов функций, вызываемых в
abc.sh
. Возможно, одна из функций не сможет получить нужные значения.
6. Заключение
Проблема, с которой вы столкнулись, скорее всего связана с отсутствием инициализации переменной или использованием несовместимого синтаксиса между версиями bash
. Всегда проверяйте наличие необходимых файлов формата и корректность путей к ним. Выполнение отладки с помощью команд set -x
и echo
должно помочь вам быстро найти и исправить проблему.
Если после проведения всех предложенных шагов ошибка останется нерешенной, рассмотрите возможность общения с коллегами или сообществом для более глубокого анализа вашего скрипта.