Если вы вызываете сценарий с явным интерпретатором, например
bash foo.sh
/bin/bash foo.sh
dash foo.sh
sh foo.sh
, то используется выбранный вами интерпретатор, независимо от того, что говорит шебанг, что является просто комментарием.
Если вы сделаете сценарий исполняемым и запустите его:
chmod a+x foo.sh
./foo.sh
ядро ищет шебанг и запускает программу с указанным в нем интерпретатором.Так как ядро не знает PATH, необходимо указать весь путь или env
:
#!/usr/bin/env python
, чтобы выбрать локальный путь для программы.
Поскольку dash, bash, zsh и т. Д. Не полностью совместимы, вам следует вызывать программу без специального интерпретатора, поскольку автору следовало бы знать, что он делает.
Возможно, на вашемСистема sh
является ссылкой на /bin/bash
, но будьте осторожны!Оболочка может проанализировать, как она была вызвана, а bash может действовать способом, называемым режимом POSIX, который немного отличается и является лишь подмножеством того, что обычно делает.
Если вы пишете сценарии для установки или для серверов, которые могут работать на разных платформах - подумайте, OsX, Linux, Solaris и т. Д., Где доступны разные оболочки, вы попытаетесь ограничиться этим подмножеством, чтобыполучить совместимый, многоразовый результат.
Но на вашей частной машине вы можете предпочесть более удобные оболочки, такие как zsh
и bash
.