当shell 运行一个程序的时候,它会向unix内核申请一个全新的进程来运行shell中指定的程序。如果运行的是编译程序,那么内核知道该怎么处理,然而shell脚本却不是编译程序,当shell要求内核运行该shell时,内核处理失败,并返回一个错误信息:“not executable format file”--不是可执行格式的文件。shell接受到这个错误后,意识到“哇,这不是一个编译程序,它一定是一个shell脚本”,紧接着创建一个新的“/bin/sh ”的拷贝来运行这个程序。
当之后一个shell时使用返回到“/bin/sh”技术非常棒,然而由于当前的unix系统有多个shell,所以当运行一个特殊的shell脚本时,必须有一种方法来告诉unix内核使用哪个shell。事实上,拥有一个能直接调用任何编程语言解释器的一般技术,而不仅仅是一个命令shell是有帮助的。它是借助与脚本文件中的特殊的第一行--以两个字符#!开头,来实现的。
当一个文件的最开始的两个字符是#!时,内核扫描该行的剩余字符作为运行该程序的解释器的全路径。内核也会扫描一个单个选项传给该解释器。内核用给定的选项和余下的命令行来调用该解释器