Обновляйте до надежного безжалостного без полного обновления

Нет, он используется только системным вызовом 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 , хотя он упоминает в разделах обоснования и в форме «если исполняемые скрипты поддерживаются системой, что-то может случиться».

1
задан 19 April 2014 в 12:37

0 ответов

Другие вопросы по тегам:

Похожие вопросы: