Bash Script: 什么是 # !/bin/Bash?

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

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

373756 次浏览

这称为 开始吧,它告诉 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 语法编写代码; 而在使用 Expect shebang 的脚本中,可以使用 Expal 语法编写代码,等等。

对更新部分的回应:

这取决于 /bin/sh在您的系统上实际指向什么。通常它只是到 /bin/bash的一个符号链接。有时,使用 #!/bin/sh编写可移植脚本只是为了表明它是一个 shell 脚本,但它使用特定系统上 /bin/sh引用的任何 shell (可能指向 /bin/bash/bin/ksh/bin/zsh)

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

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

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

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

在 Linux 系统中,我们有解释 UNIX 命令的 shell。现在 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 脚本。

请访问此 链接以获得更多信息,我已经在其中解释了这个主题。

希望这能消除你的疑惑... 祝你好运。