Каково использование / значение "#! / Bin / sh" в сценариях оболочки? - PullRequest
19 голосов
/ 08 января 2012

Какое значение / значение "#!/bin/sh" используется в сценариях оболочки? Пожалуйста, дайте мне знать, рассматривается ли это в сценарии или нет, как это комментируется.

Ответы [ 5 ]

24 голосов
/ 08 января 2012

Sha-bang (#!) [1] в начале скрипта сообщает вашей системе, что этот файл представляет собой набор команд, которые должны быть переданы указанному интерпретатору команд. # на самом деле это двухбайтовое магическое число [2], специальный маркер, обозначающий тип файла, или, в данном случае, исполняемый скрипт оболочки (введите man magic для более подробной информации по этой увлекательной теме). Сразу же после ша-бэна идет имя пути. Это путь к программе, которая интерпретирует команды в скрипте, будь то оболочка, язык программирования или утилита. Затем этот интерпретатор команд выполняет команды в сценарии, начиная сверху (строка после строки sha-bang) и игнорируя комментарии. [3]

Источник: http://tldp.org/LDP/abs/html/sha-bang.html#MAGNUMREF

3 голосов
/ 29 декабря 2016

Скрипт может указывать #! / Bin / bash в первой строке, что означает, что скрипт всегда должен запускаться с bash, а не с другой оболочкой. / bin / sh - исполняемый файл, представляющий системную оболочку. На самом деле, это обычно реализуется как символическая ссылка, указывающая на исполняемый файл для любой оболочки - системная оболочка

1 голос
/ 08 января 2012

Это путь, где расположен исполняемый файл оболочки.

0 голосов
/ 08 января 2012

означает, что ваш скрипт будет работать в режиме совместимости (POSIX) при непосредственном выполнении (, даже если /bin/sh является псевдонимом bash )


цитаты для даунвотеров:

Оболочка Bourne, или sh, была оболочкой Unix по умолчанию для Unix версии 7, и большинство Unix-подобных систем по-прежнему имеют / bin / sh - это будет оболочка Bourne, или символическая ссылка, или жесткая ссылка на совместимую shell - даже когда большинство пользователей используют более современные оболочки.

http://en.wikipedia.org/wiki//bin/sh

и

Сценарии оболочки, написанные с использованием специфических для Bash функций (bashisms), не будут работать в системе, использующей оболочку Bourne или одну из ее замен, кроме случаев, когда Bash также установлен и сценарий начинается с "строки shebang" #! / Bin Директива интерпретатора / bash вместо #! / bin / sh.

http://en.wikipedia.org/wiki/Bash_(Unix_shell)#Portability

0 голосов
/ 08 января 2012

Используется ОС для обычных файлов с установленным битом выполнения. Если файл не распознается как «чистый» двоичный формат (т. Е. ELF, или DWARF, или другой), ОС пытается и читает #!/path/to/interpreter -plus -options и преобразует:

myscript myargument

в:

/path/to/interpreter -plus -options myscript myargument

Он также устанавливает правильность argc и argv (т. Е. Argv [0] будет вашим именем скрипта, а argv [1] будет опцией 1 и т. Д.).

Это также работает для Perl-скриптов, Python-скриптов и прочего. На самом деле, для любого переводчика по вашему выбору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...