deepwhite 于 2011-05-27 10:56:02发表:
科普一下 ---- Linux 脚本文件
首先要肯定的是,脚本文件不需要指定拓展名。
那么,如果不指定拓展名,那么 OS 是怎么判断该脚本应该用什么解释器来解释执行呢? bash? python? 还是 perl ?
编写过这类脚本的人都知道,Linux 下面的脚本文件,开头第一行都会写成下面的形式:[code]
#!/bin/bash
[/code]或者[code] #!/usr/bin/env python [/code]这里的 #! 实际上是一个特殊的标记,用于告诉系统改用什么解释器来执行脚本。
对于 Linux 来讲,脚本一般通过一个终端来执行,该终端在执行脚本的时候,将会通过内核提供的相关系统调用(如 exec等)来用待执行的脚本来替换当前进程的映像。而内核在执行 exec 的时候,会首先打开该脚本,并读取脚本中的以 #! 开头的行,然后再经过一系列的判断之后,决定该使用哪个解释器来解释和执行脚本。
例如下面的简单脚本的内容和执行情况:[code]~/tmp $ cat test
#!/bin/bash
#
echo "AAAAAAA"
~/tmp $ chmod 751 test
~/tmp $ ./test
AAAAAAA
[/code]而如果我们把 /bin/bash 换成一个别的、不存在的解释器,就会发现:[code]~/tmp $ cat test
#!/bin/basha
#
echo "AAAAAAA"
~/tmp $ ./test
/bin/basha: command not found[/code]感兴趣的话,你也可以将 /bin/bash 换成一些确实存在、但不能用来解释该脚本的程序,比如 ls, find 之类的,看看会有什么现象发生。