究竟是什么解释 #!/bin/bash 行?

vav*_*ava 6 linux shell

许多不同语言的脚本都有一个#!/bin/bash带有解释器路径的头文件,因此它们可以在没有从命令行显式调用解释器的情况下执行。

但是究竟是什么读取了这一行并运行了解释器,它是 shell 还是内核?

bdk*_*bdk 7

至少在 Linux 中,内核具有此功能:专门用于 fs/binfmt_script.c。

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

但是,我想有些 shell 可能会绕过这一点,并检查解释器行的第一行,而不仅仅是调用 exec 并让内核弄清楚。


use*_*307 5

内核读取它。它使用 #! 检测文件是脚本而不是二进制文件,并执行后面的命令。

http://en.wikipedia.org/wiki/Shebang_(Unix)#As_magic_number解释了它的工作原理。