许多不同语言的脚本都有一个#!/bin/bash带有解释器路径的头文件,因此它们可以在没有从命令行显式调用解释器的情况下执行。
但是究竟是什么读取了这一行并运行了解释器,它是 shell 还是内核?
至少在 Linux 中,内核具有此功能:专门用于 fs/binfmt_script.c。
http://www.netmite.com/android/mydroid/cupcake/kernel/fs/binfmt_script.c
但是,我想有些 shell 可能会绕过这一点,并检查解释器行的第一行,而不仅仅是调用 exec 并让内核弄清楚。
内核读取它。它使用 #! 检测文件是脚本而不是二进制文件,并执行后面的命令。
http://en.wikipedia.org/wiki/Shebang_(Unix)#As_magic_number解释了它的工作原理。