Каково использование/смысл "#!/Bin/sh" в сценариях оболочки? - программирование
Подтвердить что ты не робот

Каково использование/смысл "#!/Bin/sh" в сценариях оболочки?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

myscript myargument

в

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

Он также упорядочивает argc и argv как правильные (т.е. argv [0] будет вашим именем script, а argv [1] - опцией 1 и т.д.).

Это также работает для скриптов perl, скриптов python и еще чего-то. Фактически, для любого переводчика по вашему выбору.

Ответ 5

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


цитаты для downvoters:

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

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

и

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

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