Нет, он используется только системным вызовом exec ядра Linux и рассматривается как комментарий интерпретатора
. Когда вы делаете на bash:
./something
в Linux, это вызывает системный вызов exec с полным путем к something.
Эта строка ядра вызывается в файле, переданном в exec: https: // github .com / torvalds / linux / blob / v4.8 / fs / binfmt_script.c # L25
if ((bprm-> buf [0]! = '#') || (bprm-> buf [1]! = '!'))Это считывает самые первые байты файла и сравнивает их с #!.
Если это так, то остальные строки анализируется ядром Linux, что делает другим вызовом exec с path /usr/bin/env python и текущим файлом в качестве первого аргумента:
/usr/bin/env python /path/to/script.py
, и это работает для любого языка сценариев, который использует # в качестве символа комментария.
И да, вы можете сделать бесконечный цикл с помощью:
#!/a
и исполняемого файла в /a
просто оказывается читаемым человеком, но это не требуется.
Если файл начинался с байтов, тогда системный вызов exec будет использовать другой обработчик. Другим наиболее важным встроенным обработчиком является исполняемый файл ELF: https://github.com/torvalds/linux/blob/v4.8/fs/binfmt_script.c#L25 , который проверяет байты 7f 45 4c 46 (что также, по-видимому, является человеком, читаемым для .ELF). Это считывает файл ELF, правильно помещает его в память и запускает с ним новый процесс. См. Также: https://stackoverflow.com/questions/8352535/how-does-kernel-get-an-executable-binary-file-running-under-linux/31394861#31394861
Наконец, вы могут добавлять ваши собственные обработчики shebang с помощью механизма binfmt_misc. Например, вы можете добавить пользовательский обработчик для файлов .jar: https://stackoverflow.com/questions/8352535/how-does-kernel-get-an-executable-binary-file-running-under- linux / 31394861 # 31394861 Этот механизм даже поддерживает обработчики с расширением файла.
Я не думаю, что POSIX указывает на shebangs: https://unix.stackexchange.com/a/346214/32558 , хотя он упоминает в разделах обоснования и в форме «если исполняемые скрипты поддерживаются системой, что-то может случиться».