Что такое использование/значение "#!/bin/sh
" в сценариях оболочки? Пожалуйста, дайте мне знать, считается ли это в script или нет, поскольку он прокомментирован.
Каково использование/смысл "#!/Bin/sh" в сценариях оболочки?
Ответ 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.