Я создаю небольшой скрипт автоматической установки, который изменит /etc/profile
и $HOME/.profile
, если некоторые пути не будут экспортированы. Затем я хотел бы перезагрузить их автоматически.
Я прочитал, что source
делает это, поэтому я запустил свой терминал и ввел:
source /etc/profile
source ~/.profile
Из терминала не выдается никакой ошибки.
Однако, размещение этих двух команд внутри скрипта Bash приводит к source: not found
.
#!/bin/sh
(по-видимому, это не гарантирует)? /bin/sh
не bash
. Для выполнения сценария с bash
запишите #!/bin/bash
как первая строка в сценарии.
ошибка source: not found
не отбрасывается, потому что /etc/profile
не найден. Это отбрасывается, потому что source
не найден. source
встроенная функция Bash, и Вы не выполняете сценарий с bash
. Таким образом, ясно, почему это не найдено. Изменитесь #!
строка в сценарии, и это будет работать.
1. Как я могу быть уверен, что сценарий выполняется Bash, даже если
#!/bin/sh
указан (по-видимому, это не гарантирует это)?
Быть уверенным что сценарий, записанный для sh
оболочка (как в Вашем случае - видят то, Что различие между #!/bin/sh и #!/bin/bash?) выполняется Bash, просто выполните следующую команду:
bash script_name
Таким образом Вы не будете больше получать ту ошибку.
2. Почему это сказало бы, что эти два источника не могут быть найдены, когда они явно там?
Это не говорит, что те полученные файлы не там. Это говорит что source
команда не найдена. Это нормально, потому что, так как Вы запускаете свой сценарий с #!/bin/sh
строка, Ваш сценарий выполнит использование sh
и нет bash
поскольку можно думать. Почему это нормально? Поскольку source
команда является встроенным Bash, но не a sh
встроенный. Получать файл в sh
, необходимо использовать .
(точка). Пример:
. /etc/profile
. ~/.profile
Иначе должен изменить строку хижины на #!/bin/bash
как хаос, сказанный в его ответе.
Посмотрите это ТАК вопрос :
/bin/sh
обычно некоторая другая оболочка, пытающаяся подражать Shell. Много использования дистрибутивов/bin/bash
дляsh
, это поддерживает источник. На Ubuntu, тем не менее,/bin/dash
используется, который не поддерживает источник. Если Вы не можете отредактировать сценарий, попытайтесь изменить оболочку, которая выполняет его.
Некоторая поддержка оболочек .
вместо source
. Таким образом, можно попробовать что-то вроде этого
. filename
вместо
source filename
Hope, это работает