shell脚本中“#!/ bin / sh”的用法/含义是什么?

shell脚本中“ #!/bin/sh ”的用法/含义是什么? 请让我知道它是否被考虑在脚本中,因为它被评论。

脚本头部的sha-bang(#!)[1]告诉你的系统这个文件是一组命令,被送到命令解释器指示的地方。 #! 实际上是一个双字节[2]幻数,一个指定文件类型的特殊标记,或者在这种情况下是一个可执行的shell脚本(关于这个迷人的主题的更多细节请输入man magic)。 紧跟着沙包是一个路径名称。 这是解释脚本中的命令的程序的路径,无论是shell,编程语言还是实用程序。 这个命令解释器然后执行脚本中的命令,从顶部开始(沙包线后面的行),忽略注释。 [3]

资料来源: http : //tldp.org/LDP/abs/html/sha-bang.html#MAGNUMREF

这是shell可执行文件所在的路径。

脚本可以在第一行指定#!/ bin / bash,这意味着脚本应该总是用bash运行,而不是另一个shell。 / bin / sh是一个代表系统shell的可执行文件。 实际上,它通常作为指向可执行文件的符号链接实现,无论哪个shell是系统shell

它被操作系统用于执行位设置的常规文件。 如果文件没有被识别为“纯”二进制格式(即,ELF或DWARF或其他),则操作系统会尝试读取#!/path/to/interpreter -plus -options并进行转换:

 myscript myargument 

成:

 /path/to/interpreter -plus -options myscript myargument 

它也安排argc和argv是正确的(即,argv [0]将是您的脚本名称,而argv [1]是选项1等)。

这也适用于perl脚本,python脚本和whatnot。 实际上,对于你所选择的任何口译人员而言。

这意味着当直接执行脚本时,脚本将以兼容模式(POSIX)运行( 即使/bin/sh是bash的别名 )


引用为downvoters:

Bourne shell或sh是Unix V7的默认Unix shell,大多数类Unix系统仍然具有/ bin / sh – 这将是Bourne shell,或者是一个符合链接或者是兼容shell的硬链接 – 甚至当大多数用户使用更现代的贝壳时。

http://en.wikipedia.org/wiki//bin/sh

和:

使用Bash特定功能(bashisms)编写的Shell脚本在使用Bourne shell或其替代项的系统上将不起作用,除非Bash也安装并且脚本以#!/ bin / bash解释器的“shebang行”开头指令而不是#!/ bin / sh。

http://en.wikipedia.org/wiki/Bash_(Unix_shell)#Portability