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

时间:2012-01-08 11:41:32

标签: shell unix

shell脚本中“#!/bin/sh”的用法/含义是什么?请告诉我是否在脚本中考虑它是否被评论。

5 个答案:

答案 0 :(得分:24)

  

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

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

答案 1 :(得分:3)

脚本可以在第一行指定#!/ bin / bash,这意味着脚本应始终使用bash而不是另一个shell运行。 / bin / sh是表示系统shell的可执行文件。实际上,它通常被实现为指向系统shell的任何shell的可执行文件的符号链接

答案 2 :(得分:1)

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

答案 3 :(得分:0)

操作系统使用它来设置执行位的常规文件。如果文件未被识别为“纯”二进制格式(即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脚本和诸如此类的东西。事实上,对于你选择的任何翻译。

答案 4 :(得分:0)

这意味着您的脚本将在直接执行时以兼容模式(POSIX)运行(even if /bin/sh is an alias to bash


引用下来的人:

  

Bourne shell或sh是Unix Version 7的默认Unix shell,大多数类Unix系统继续有/ bin / sh - 它将是Bourne shell,或者是兼容的符号链接或硬链接shell - 即使大多数用户使用更现代的shell。

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

  

使用Bash特定功能(bashisms)编写的Shell脚本在使用Bourne shell或其中一个替换的系统上不起作用,除非还安装了Bash并且脚本以#!/ bin的“shebang line”开头/ bash interpreter指令而不是#!/ bin / sh。

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