![Linux 在运行文本脚本时如何决定调用哪个解释器](https://linux22.com/image/176158/Linux%20%E5%9C%A8%E8%BF%90%E8%A1%8C%E6%96%87%E6%9C%AC%E8%84%9A%E6%9C%AC%E6%97%B6%E5%A6%82%E4%BD%95%E5%86%B3%E5%AE%9A%E8%B0%83%E7%94%A8%E5%93%AA%E4%B8%AA%E8%A7%A3%E9%87%8A%E5%99%A8.png)
有人知道 Linux 在运行文本脚本时如何决定调用哪个解释器吗?我需要“shebang”的细节、目的以及如何进行
答案1
执行脚本有两种主要方式:
使用将加载脚本的可执行文件的名称:
perl script.pl python script.py
在这种情况下,shell 加载可执行文件perl
,python
并为其提供参数,可执行文件应该能够知道给定的参数是一个脚本并加载和执行它。
这里没有什么特别的魔力,shell 使用参数启动一个可执行文件。
该脚本是可执行的并且自行启动:
$ script.sh $ ./script.pl $ /some/path/script.py
通过调用将控制权交给内核execve
。如果脚本是一个具有有效 she-bang(或例如 ELF 等可执行文件)的文本文件,内核将理解文件开头的神奇值并加载给定的解释器。解释器反过来将文本文件作为脚本加载并执行。
如果 shell 调用execve
失败(例如,脚本没有有效的 she-bang),shell可能直接加载并执行脚本。这是由 bash 完成的。
并且,在某些情况下,来自man bash
:
如果程序是以#! 开头的文件,则第一行的其余部分指定该程序的解释器。 shell 在本身不处理此可执行格式的操作系统上执行指定的解释器。
如果您想了解更多详情请访问: