Сообщение об ошибке «источник: не найден» при запуске скрипта

Я создаю небольшой скрипт автоматической настройки, который будет изменять /etc/profile и $HOME/.profile, если некоторые пути не экспортируются. Затем, я хотел бы перезагрузить их автоматически.

Я прочитал, что source делает это, поэтому я активировал свой терминал и ввел:

source /etc/profile
source ~/.profile

Из терминала , он не выдал никакой ошибки.

Однако, если эти две команды внутри сценария Bash приводятся в source: not found.

Как я могу быть уверен, что сценарий выполняется Bash, даже если #!/bin/sh указан (видимо, он не гарантирует его)? Почему бы это сказать, что эти два источника не могут быть найдены, когда они безошибочно там?
1
задан 31 July 2014 в 15:27

2 ответа

1. Как я могу быть уверен, что скрипт выполняется Bash, даже если указан #!/bin/sh (видимо, он не гарантирует его)?

Чтобы убедиться, что сценарий, написанный для оболочки sh (как в вашем случае - см. раздел «Что такое разница между #! / bin / sh и #! / bin / bash?»), выполняется Bash, просто запустите следующую команду:

bash script_name

Таким образом, вы больше не получите эту ошибку.

1. Как я могу быть уверен, что скрипт выполняется Bash, даже если указан #!/bin/sh (видимо, он не гарантирует его)?

2. Почему бы это сказать, что эти два источника не могут быть найдены, когда они безошибочно там?

. /etc/profile
. ~/.profile

Он не говорит, что этих источников не существует. Он говорит, что команда source не найдена. Это нормально, потому что, поскольку вы запускаете свой скрипт с помощью строки #!/bin/sh, ваш скрипт будет работать, используя sh, а не bash, как вы думаете. Почему это нормально? Поскольку команда source является встроенной Bash, но не встроенной sh. Чтобы создать файл в sh, вы должны использовать . (точка). Пример:

7
ответ дан 24 May 2018 в 05:08

См. этот вопрос SO:

/bin/sh обычно является некоторой другой оболочкой, пытающейся имитировать оболочку. Многие дистрибутивы используют /bin/bash для sh, он поддерживает источник. В Ubuntu используется /bin/dash, который не поддерживает источник. Если вы не можете отредактировать скрипт, попробуйте изменить оболочку, которая ее запускает.
4
ответ дан 24 May 2018 в 05:08

Другие вопросы по тегам:

Похожие вопросы: