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

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

许多不同语言的脚本都有一个#!/bin/bash带有解释器路径的标题,因此它们可以在无需从命令行明确调用解释器的情况下执行。

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

答案1

至少在Linux中,内核具有此功能:特别是fs / binfmt_script.c。

https://github.com/torvalds/linux/blob/06c2afb862f9da8dc5efa4b6076a0e48c3fbaaa5/fs/binfmt_script.c#L40

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

答案2

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

http://en.wikipedia.org/wiki/Shebang_(Unix)#As_magic_number很好地解释了它是如何工作的。

相关内容