评论#!/ bin / sh行之前和/或之后的注释(#)行的效果

时间:2013-05-13 07:29:15

标签: shell comments sh shebang

示例一

#!/bin/sh
# purpose: print out current directory name and contents
pwd
ls

示例二

# purpose: print out current directory name and contents
#!/bin/sh
pwd
ls

有什么区别 - 如果我将第一行作为评论(#),将#!/bin/sh作为第二行,会发生什么?

#!/bin/sh的含义是什么?

2 个答案:

答案 0 :(得分:2)

通常,shell脚本由/ etc / passwd文件中定义的默认shell运行。但是您可以明确定义一个可以运行脚本的程序。

Unices使用通用方法来确定运行特定脚本所需的程序(man execve(2))。如果脚本具有正确的执行权限集并且在脚本中第一行以#!个字符开头,则它将由之后定义的程序运行。

例如,如果第一行是#!/usr/bin/awk -f,则文件的其余部分将传递给awk程序(因此必须使用awk语法)。或者,如果Makefile以#!/usr/bin/make -f开头,则文件的其余部分将传递给make。您可以将脚本作为普通程序启动,脚本可以用awkmake(或任何已定义的)语法编写。

如果execve找不到#!作为文件的前两个字符,它将被视为普通脚本文件,它将按原样运行。

因此使用#!您可以确定脚本语言,并且您不需要知道其他用户使用您的脚本使用的shell。在任何其他行中,#!将被解释为您的默认shell,通常只是注释行。

答案 1 :(得分:2)

1st&的区别是什么?第二个shell脚本..?

输出没有区别。但是,当解释器逐一读取行时,执行这两者的时间会有所不同。

如果我在第二行#!/ bin / sh后的第一行发表评论(#)那么会发生什么?

除了shebang(#!)以#()开头的任何行都被视为shell脚本中的注释。

#!/ bin / sh的含义是什么?

它是在shebang(#!)之后使用的解释器的路径(这里是 - / bin / sh)。 Shell将尝试使用shebang之后提到的解释器语言来执行脚本。