Почему "она взрыва" начинается с #!, как #!/bin/bash? Я всегда соглашался с тем, как это делается, но есть ли причина для этого?
Зачем начинать с #; разве это обычно не комментарий? Или дело в комментариях?
Почему "она взрыва" начинается с #!, как #!/bin/bash? Я всегда соглашался с тем, как это делается, но есть ли причина для этого?
Зачем начинать с #; разве это обычно не комментарий? Или дело в комментариях?
Ответы:
Обычно shebang относится только к #!( !обычно называется «bang», и похоже, что «she» является искажением «SHArp» или «haSH» #) - вся строка называется строкой shebang
Он намеренно начинается с символа комментария для обратной совместимости с вещами, которые не знают, как с этим справиться; по- !видимому, просто отличить его от случайного комментария, начинающего файл, поэтому файл, который начинается с # this is my script!, не пытается запустить this is my script!интерпретатор
!часто используется в других контекстах, чтобы указать команду, которая будет выполнена. Например, в vimили в других программах с их собственными командными строками взрыв часто является escape-символом, который заставляет их выполнять команду в системной оболочке вместо их внутреннего интерфейса.
Чтобы понять это, вы должны понимать, что первая строка скрипта фактически читается дважды , двумя разными программами. В первый раз ядро открывает файл и ищет последовательность символов ( #!) в первой строке. Если он находит его, он запускает указанную там программу оболочки, передавая имя файла в качестве параметра. (например, если файл /home/me/fooначинается с #!/bin/sh, ядро запустится /bin/sh /home/me/foo).
Затем оболочка ( bin/shили любая другая программа-интерпретатор) считывает файл. Оболочка ничего не знает о строках shebang, но все равно будет читать первую строку, потому что она такая же, как любая другая строка в файле ... она читает их все. Вы не хотите, чтобы оболочка вызывала сбой или каким-либо образом изменяла свое поведение ... способ сделать это состоит в том, чтобы воспринимать это как комментарий и игнорировать его. Таким образом, лучшим символом для начала инструкции ядра будет символ комментария.
Это должен быть комментарий, потому что только так он будет работать для запуска скрипта, такого как "имя_символа имени сценария". Я не знаю о происхождении "!"
#!(насколько помнит dmr…), включая объяснение того, почему#(да, линия должна была игнорироваться существующими оболочками).