解释器文件(interpreter file)是以:
#! pathname [ optional-argument ]
作为起始行的文本文件,exec执行的不是解释器文件,而是解释器,即pathname.
简单来说,当以一个解释器文件作参数调用exec时,exec内部首先会得到错误,因为该文件
并非机器可执行,于是把它识别为解释器文件,调用pathname(那应该是execl啊,但书上说
是execlp),并传给它参数:
optional-argument, interpreter-file's path, arguments of the interpreter-file
可能与具体实现有些出入吧,但就此打住好了.
采用解释器文件比在shell中调用解释器减少了开销,在后一种情况,sh首先被执行,然后sh
会对解释器进行fork, exec, wait,而在前一种情况,只是直接执行解释器罢了.
*就算直接从shell中调用shell script,也是fork, exec, wait,不过exec执行的是sh.