Я создаю небольшой скрипт автоматической настройки, который будет изменять /etc/profile и $HOME/.profile, если некоторые пути не экспортируются. Затем, я хотел бы перезагрузить их автоматически.
Я прочитал, что source делает это, поэтому я активировал свой терминал и ввел:
source /etc/profile
source ~/.profile
Из терминала , он не выдал никакой ошибки.
Однако, если эти две команды внутри сценария Bash приводятся в source: not found.
Как я могу быть уверен, что сценарий выполняется 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, вы должны использовать . (точка). Пример:
См. этот вопрос SO:
/bin/sh обычно является некоторой другой оболочкой, пытающейся имитировать оболочку. Многие дистрибутивы используют /bin/bash для sh, он поддерживает источник. В Ubuntu используется /bin/dash, который не поддерживает источник. Если вы не можете отредактировать скрипт, попробуйте изменить оболочку, которая ее запускает.