Shebang–Linux 上的 Shebang 符号(#!)
解释
在计算领域中,Shebang(也称为 Hashbang )是一个由井号和叹号构成的字符序列#! ,其出现在文本文件的第一行的前两个字符。 在文件中存在 Shebang 的情况下,类 Unix 操作系统的程序加载器会分析 Shebang后的内容,将这些内容作为解释器指令,并调用该指令,并将载有Shebang的文件路径作为该解释器的参数
例如,以指令#!/bin/sh开头的文件在执行时会实际调用/bin/sh程序(通常是 Bourne shell 或兼容的 shell,例如 bash、dash 等)来执行。这行内容也是 shell脚本的标准起始行。
用途
解释器指令允许脚本和数据文件充当系统命令,无需在调用时由用户指定解释器,从而对用户和其它程序隐藏其实现细节。
假设/usr/local/bin/foo中有一以下行开头的Bourne shell脚本
#!/bin/sh -x
而它被如此调用("$"是命令提示符)
$ foo bar
该命令的输出等同于
$ /bin/sh -x /usr/local/bin/foo bar
除了argv[0]被设定为脚本的文件名,而非解释器的文件名外。
由于 sh 从其命令行指定的文件中读取命令,上面的命令就会执行 /usr/local/bin/foo 中的命令,同时,将 bar作为foo 命令的参数 $1。
由于shebang开头的井号也是Bourne shell和许多其它解释性语言的注释符,因此在这些语言中,解释器指令本身会被解释器认为是单纯的注释而跳过。 然而,并不是每一种解释器都会自动忽略shebang行,例如对于下面的脚本,
#!/bin/cat
Hello world!
cat 会把文件中的两行都输出到标准输出中。
使用 #!/usr/bin/env 脚本解释器名称 是一种常见的在不同平台上都能正确找到解释器的办法。
例子
下面列出了一些典型的 shebang 解释器指令:
#!/bin/sh—使用sh,即Bourne shell或其它兼容shell执行脚本#!/bin/csh—使用csh,即C shell执行#!/usr/bin/perl -w—使用带警告的Perl执行#!/usr/bin/python -O—使用具有代码优化的Python执行#!/usr/bin/php—使用PHP的命令行解释器执行
在许多系统上,/bin/sh软链接或硬链接到Bash,而/bin/csh则链接到tcsh,因此设定前面的解释器实际上是运行的与之兼容的,或改进的版本。
Shebang(#!)是Linux及类Unix系统中用于指定脚本解释器的特殊字符序列。本文详细解释了Shebang的工作原理,如何通过Shebang使脚本能够独立执行,以及在不同场景下使用Shebang的例子。
1449

被折叠的 条评论
为什么被折叠?



