许多不同语言的脚本都有一个#!/bin/bash
带有解释器路径的标题,因此它们可以在无需从命令行明确调用解释器的情况下执行。
但是究竟是什么读取了这一行并运行了解释器,是shell还是内核?
答案1
至少在Linux中,内核具有此功能:特别是fs / binfmt_script.c。
然而,我想有些 shell 可能会绕过这个问题,并检查第一行是否有解释器行,而不是仅仅调用 exec 并让内核弄清楚。
答案2
内核读取它。它使用 #! 来检测该文件是脚本而不是二进制文件,并执行后面的命令。
http://en.wikipedia.org/wiki/Shebang_(Unix)#As_magic_number很好地解释了它是如何工作的。