6

Многие скрипты на разных языках имеют #!/bin/bash с указанием пути к интерпретатору, поэтому они могут выполняться без явного вызова интерпретатора из командной строки.

Но что именно читает эту строку и запускает интерпретатор, это оболочка или ядро?

2 ответа2

7

По крайней мере в Linux ядро обладает такой функциональностью: в частности, fs/binfmt_script.c.

http://www.netmite.com/android/mydroid/cupcake/kernel/fs/binfmt_script.c

Однако я полагаю, что некоторые оболочки могут обойти это и проверить первую строку на наличие строки интерпретатора, а не просто вызвать exec и позволить ядру выяснить это.

5

Ядро это читает. Он использует #! определить, что файл является скриптом, а не двоичным файлом, и выполнить следующую команду.

http://en.wikipedia.org/wiki/Shebang_(Unix)#As_magic_number объясняет, как это работает довольно хорошо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .