Bash脚本:#!/ bin / bash是什么意思?

时间:2012-12-14 03:03:29

标签: bash

在bash脚本中,第一行的#!/bin/bash是什么意思?

更新#!/bin/bash#!/bin/sh之间有区别吗?

3 个答案:

答案 0 :(得分:110)

这称为shebang,它告诉shell在执行时解释脚本的程序。

在您的示例中,脚本将由bash shell解释并运行。

其他一些榜样是:

(来自维基百科)

#!/bin/sh — Execute the file using sh, the Bourne shell, or a compatible shell
#!/bin/csh — Execute the file using csh, the C shell, or a compatible shell
#!/usr/bin/perl -T — Execute using Perl with the option for taint checks
#!/usr/bin/php — Execute the file using the PHP command line interpreter
#!/usr/bin/python -O — Execute using Python with optimizations to code
#!/usr/bin/ruby — Execute using Ruby

还有一些我能想到的其他内容,例如:

#!/bin/ksh
#!/bin/awk
#!/bin/expect

例如,在使用bash shebang的脚本中,您将使用bash语法编写代码;而在一个期望shebang的脚本中,你会用expect语法编写它,依此类推。

对更新部分的回应:

这取决于/bin/sh实际指向您系统的内容。通常它只是/bin/bash的符号链接。有时,可移植脚本使用#!/bin/sh编写,仅表示它是一个shell脚本,但它使用/bin/sh在该特定系统上引用的任何shell(可能指向/bin/bash,{ {1}}或/bin/ksh

答案 1 :(得分:12)

当脚本中的第一个字符为#!时,称为shebang。如果您的文件以 #!/path/to/something标准是运行something并将文件的其余部分作为输入传递给该程序。

话虽如此,#!/bin/bash#!/bin/sh甚至#!/bin/zsh之间的区别在于是否使用bash,sh或zsh程序来解释文件的其余部分。传统上,bashsh只是不同的程序。在某些Linux系统上,它们是同一程序的两个副本。在其他Linux系统上,shdash的链接,在传统的Unix系统(Solaris,Irix等)上bash通常是与sh完全不同的程序。

当然,该线的其余部分不必以sh结尾。它也可以是#!/usr/bin/python#!/usr/bin/perl,甚至是#!/usr/local/bin/my_own_scripting_language

答案 2 :(得分:12)

在bash脚本中,第1行的#!/ bin / bash是什么意思?

在Linux系统中,我们有shell来解释我们的UNIX命令。现在Unix系统中有很多shell。其中,有一个名为bash的shell,这是一个非常常见的Linux,它有着悠久的历史。这是Linux中默认的shell。

当您编写脚本(unix命令的集合等)时,您可以选择指定可以使用的shell。通常,您可以使用Shebang指定它所使用的shell(是的,这就是它的名称)。

因此,如果您在脚本顶部使用#!/ bin / bash,那么您告诉系统将bash用作默认shell。

现在回答你的第二个问题:#!/ bin / bash与#!/ bin / sh之间是否有区别?

答案是肯定的。当你告诉#!/ bin / bash然后你告诉你的环境/ os使用bash作为命令解释器。这是硬编码的东西。

每个系统都有自己的shell,系统将使用它来执行自己的系统脚本。这个系统shell可能因操作系统而异(大部分时间都是bash。最近Ubuntu使用dash作为默认系统shell)。当您指定#!/ bin / sh时,系统将使用它的内部系统shell来解释您的shell脚本。

访问此link以获取我已解释此主题的更多信息。

希望这会消除你的困惑......祝你好运。