не удается открыть ” для чтения: Нет такого файла или каталога

Вопрос или проблема

Я пытаюсь запустить .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. Проверка переменных и вызовов

Убедитесь, что все переменные, используемые в ваших функциях и вызовах других скриптов, корректно установлены. В вашем случае попробуйте следующее:

  1. Запустите отладку вашего скрипта, чтобы отследить, какие именно переменные вызывают ошибку. Добавьте следующие строки в начало вашего скрипта:

    set -x  # Включает режим отладки
  2. Пройдите по коду, чтобы понять, где именно переменные могут не устанавливать значения. Возможно, что в каком-то местах используется использование неожиданного состояния переменной.

3. Убедитесь в наличии и доступности файлов

Проверьте, указаны ли в ваших скриптах правильные пути к другим скриптам. Чтобы убедиться, что файлы действительно находятся в той же директории, можно использовать команду ls -la, как вы сделали. Однако также проверьте, корректно ли ссылаетесь на эти файлы в abc.sh. Например, если вы используете относительный путь, убедитесь, что вы запускаете скрипт из нужной директории.

4. Ошибка с local

Когда вы изменили ваш скрипт на использование относительных путей, ошибка local: not found указывает на то, что интерпретатор не распознает команду local. Эта ошибка может возникать, если ваш скрипт запускается в несовместимой оболочке или если вы используете синтаксис, специфичный для другой версии bash. Убедитесь, что файл fox_comm_sh_tools.sh начинается с правильной шебанг строки:

#!/bin/bash

5. Советы по отладке

  1. Запустите echo для вывода значений переменных перед их использованием, чтобы увидеть, действительно ли они установлены.

    echo "Путь к файлу: $tempfile"
  2. Чтобы лучше понимать, что вызывает ошибку, проверьте содержимое всех вызовов функций, вызываемых в abc.sh. Возможно, одна из функций не сможет получить нужные значения.

6. Заключение

Проблема, с которой вы столкнулись, скорее всего связана с отсутствием инициализации переменной или использованием несовместимого синтаксиса между версиями bash. Всегда проверяйте наличие необходимых файлов формата и корректность путей к ним. Выполнение отладки с помощью команд set -x и echo должно помочь вам быстро найти и исправить проблему.

Если после проведения всех предложенных шагов ошибка останется нерешенной, рассмотрите возможность общения с коллегами или сообществом для более глубокого анализа вашего скрипта.

Оцените материал
Добавить комментарий

Капча загружается...