shell脚本中“#!/bin/sh
”的用法/含义是什么?请告诉我是否在脚本中考虑它是否被评论。
答案 0 :(得分:24)
脚本头部的sha-bang(#!)[1]告诉您的系统该文件是一组命令,用于输入指示的命令解释器。 #!实际上是一个双字节[2]幻数,一个指定文件类型的特殊标记,或者在这种情况下是一个可执行的shell脚本(输入man magic以获取有关这个引人入胜的主题的更多细节)。紧接着sha-bang是路径名。这是解释脚本中命令的程序的路径,无论是shell,编程语言还是实用程序。然后,此命令解释程序从顶部(sha-bang行后面的行)开始执行脚本中的命令,并忽略注释。 [3]
答案 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。