wudalang1981 于 2011-05-27 15:27:11发表:
先顶了再说,感谢楼主哦,太感谢了
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 之类的,看看会有什么现象发生。
yanyongkg 于 2011-05-26 20:54:28发表:
伸手党很多
hantu 于 2011-05-26 19:23:53发表:
.sh不是必须的,不用后缀名也一样用,加后缀是为了方便自己和别人较快地识别文件类型
相思爱文 于 2011-05-26 18:28:30发表:
楼主随便写一个脚本文件,然后不以.sh为结尾命名,然后执行一下试试吧。
yongyun521 于 2011-05-26 14:57:24发表:
新手不太清楚。
wudalang1981 于 2011-05-27 15:27:11发表:
先顶了再说,感谢楼主哦,太感谢了
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 之类的,看看会有什么现象发生。
yanyongkg 于 2011-05-26 20:54:28发表:
伸手党很多
hantu 于 2011-05-26 19:23:53发表:
.sh不是必须的,不用后缀名也一样用,加后缀是为了方便自己和别人较快地识别文件类型
相思爱文 于 2011-05-26 18:28:30发表:
楼主随便写一个脚本文件,然后不以.sh为结尾命名,然后执行一下试试吧。
yongyun521 于 2011-05-26 14:57:24发表:
新手不太清楚。