Ошибка сценария bash: источник: не найден

Мне не хватает фундаментального понимания источников файлов в bash. Я пробовал различные подходы, которые кажутся такими, какие они должны работать, но я все еще получаю этот source: not found ошибок source: not found .

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

 cd /home/user/path/to/ source myfile 

Также не было полного абсолютного пути к файлу, который будет использоваться:

 source /home/user/path/to/myfile 

Ошибка «источник: не найден» с номером строки вышеуказанного оператора.

Есть ли что-то еще, что-то основное, я мог бы забыть? Я проверил пути, которые я использую, и я не вижу никаких ошибок. Эта проблема повторяема.

Я запускаю Ubuntu на сервере Linode, и мои скрипты начинаются с:

 #!/bin/bash 

4 Solutions collect form web for “Ошибка сценария bash: источник: не найден”

Ваша вторая попытка использовать абсолютный путь должна быть правильным методом.

Возможные причины вашей ошибки:

  1. Файл не существует.
  2. Файл существует, но по какой-то причине вы не можете его прочитать (например, разрешения или некоторая ошибка файловой системы.
  3. У вас есть alias который переопределяет встроенный source (исправить с unalias source )
  4. У вас есть функция, которая является основным source (исправить с unset -f source )
  5. Вы как-то не используете bash (хотя ваша линия банга подскажет вам). source не POSIX. Использование source на dash не работает . работает.
  6. Мой тест с source с bash в режиме POSIX работал, хотя, возможно, это связано с моей версией или флагами компиляции. Возможно, это для вас другое, и вы находитесь в режиме POSIX.

1 и 5 дают ошибки, подобные тому, который вы опубликовали.

Возможно, вы входите в систему с пользователем, который запускает оболочку, отличную от bash. Предположим, что вы входите в систему с помощью пользователей X и X, запускаете sh или другую оболочку, а не bash, а с пользователем X запускаете source myscript.sh , тогда вы должны получить заданную ошибку.

Я столкнулся с подобной проблемой при запуске файла из файла rpm.spec.

Я исправил проблему, предоставив явный путь к скрипту.

Итак, вместо

 source myfile 

Мне пришлось бежать

 source ./myfile 

Я не уверен, что было точной причиной этого, но похоже, что файл myfile был найден в $ PATH и $ CWD. Я предполагаю, что это до некоторой конфигурации в оболочке.

Два вопроса:

  1. Убедитесь, что сценарий фактически интерпретируется bash .
  2. Если имя, которое вы используете с source , не содержит косой черты, bash будет искать его в $PATH .

Сценарий не будет интерпретироваться bash если вы явно запускаете его, например, с помощью sh script . Он будет интерпретирован bash если он является исполняемым, а его первая строка – #!/bin/bash (отрегулируйте путь, соответствующий местоположению бинарного ./script bash в вашей системе), и вы запустите его с помощью ./script , или если вы запустите его с bash script .

Кроме того, согласно руководству bash , source filename будет

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

  • Запустите сценарий оболочки перед запуском
  • .sh-файл, используемый sftp после загрузки и не может быть выполнен
  • путают с переменными awk и shell
  • Как расширить команду в bash, чтобы она расширялась в зависимости от параметров?
  • SSH вызывает остановку цикла
  • Grep для рисунка в начале или в середине линии
  • Запустить скрипт при загрузке?
  • Использование basename для расширения расширений файла и поиска файлов с тем же именем
  • Bash: вычислить время, прошедшее между двумя временными метками
  • while цикл работает только один раз?
  • Согласование и сохранение и возврат информации на стандартный ввод
  • Linux и Unix - лучшая ОС в мире.