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

Rap*_*tor 93 bash

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

更新:有没有之间的差异#!/bin/bash#!/bin/sh

sam*_*hen 122

这被称为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
Run Code Online (Sandbox Code Playgroud)

还有一些我能想到的额外的东西,例如:

#!/bin/ksh
#!/bin/awk
#!/bin/expect
Run Code Online (Sandbox Code Playgroud)

例如,在使用bash shebang的脚本中,您将使用bash语法编写代码; 而在期望shebang的脚本中,您可以使用expect语法对其进行编码,依此类推.

对更新部分的回应:

这取决于系统上/bin/sh实际指向的内容.通常它只是一个符号链接/bin/bash.有时候,便携脚本书面#!/bin/sh只是表示,这是一个shell脚本,但它使用哪个外壳由被称为/bin/sh该特定系统上(也许它指向/bin/bash,/bin/ksh/bin/zsh)

  • @ShivanRaptor`#!/ bin/bash`表示在bash中运行此脚本.`#!/ bin/sh`表示在`sh`中运行这个脚本,它是默认的unix shell,可能是bash或任何其他变种,如ksh,dash,zsh等 (4认同)
  • 谢谢!但是 `#!/bin/bash` 和 `#!/bin/sh` 之间有区别吗? (3认同)

Jos*_*oyd 12

当脚本中的第一个字符#!被称为shebang时.如果您的文件以#!/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.


kta*_*kta 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可以在OS到OS之间变化(大部分时间它都是bash.最近Ubuntu使用dash作为默认系统shell).当您指定#!/ bin/sh时,系统将使用它的内部系统shell来解释您的shell脚本.

请访问此链接以获取我已解释此主题的更多信息.

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