回答
这被称为shebang,它在执行时告诉shell何种程序来解释脚本。
在您的示例中,脚本将由bash shell进行解释和运行。
其他一些例子shebangs是:
(维基百科)
#!/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文件的脚本中,您可以使用bash语法编写代码;而在希望使用shebang的脚本中,您可以用期望的语法对其进行编码,等等。
响应更新部分:
这取决于什么/bin/sh
实际上指向您的系统上。通常它只是一个符号链接/bin/bash
。有时候,可移植的脚本与#!/bin/sh
写只是为了表明它是一个shell脚本,但它使用取其壳由/bin/sh
该特定系统的简称(也许它指向/bin/bash
,/bin/ksh
或/bin/zsh
)
谢谢!但是'#!/ bin/bash'和'#!/ bin/sh'有区别吗? – Raptor
@ShivanRaptor'#!/ bin/bash'表示在bash中运行这个脚本。 '#!/ bin/sh'表示在'sh'中运行这个脚本,它是默认的unix shell,可能是bash或者任何其他的变体,如ksh,dash,zsh等。 –
当'bash'运行为'sh'时, ,它的行为与运行时的行为不同(比POSIX更像)。阅读手册;它确实涵盖了这个细节。 –
当第一个字符一个脚本是#!
,这就是所谓的shebang。如果您的文件以 #!/path/to/something
开头,则标准运行something
并将文件的其余部分作为输入传递给该程序。
随着中说,差异#!/bin/bash
之间,#!/bin/sh
,甚至#!/bin/zsh
无论是在bash,sh或zsh的程序用来解释文件的其余部分。传统上,bash
和sh
只是不同的程序。在一些Linux系统中,它们是同一个程序的两个副本。在其他Linux系统上,sh
是dash
的链接,在传统的Unix系统(Solaris,Irix等)上,bash
通常是与sh
完全不同的程序。
当然,该行的其余部分不必以sh结尾。它也可以是#!/usr/bin/python
,#!/usr/bin/perl
或甚至#!/usr/local/bin/my_own_scripting_language
。
'sh'通常是'bash'运行兼容模式,这是真实的,因为bash已经成为大多数Linux发行版的默认shell,而且在此之前的好几年,IIRC可以安全地说它已经有15年了,可能超过了20. – ocodo
在我的Debian和Ubuntu系统上,'/ bin/sh'是破折号。 Android表示它使用'ash'作为'/ bin/sh'。 –
@JoshuaDBoyd很好的捕获,很多(尽管可能不是全部)BSD unixes使用Ash作为它们的默认shell,而不是Bash,而Debian/Ubuntu使用Dash。与Bash类似,Ash和Dash都有'sh'兼容模式。如果我们深入了解Solaris,Aix,HPUX,Ultrix,SCO等,它们都将拥有自己的默认外壳,它将具有'sh'仿真(保持POSIX兼容)。 – ocodo
在bash脚本中,第一行的#!/ bin/bash是什么意思?
在Linux系统中,我们有shell来解释我们的UNIX命令。现在在Unix系统中有一些shell。其中,有一个叫做bash的shell,它是非常非常常见的Linux,它有着悠久的历史。这是Linux中的默认shell。
当您编写脚本(unix命令等的集合)时,您可以选择指定可以使用哪个shell。一般来说,你可以使用Shebang来指定它的外壳(是的,它就是它的名字)。
因此,如果您在脚本的顶部#!/ bin/bash,那么您告诉系统将bash用作默认shell。
现在来谈谈第二个问题:#!/ bin/bash和#!/ bin/sh之间有区别吗?
答案是肯定的。当你告诉#!/ bin/bash时,你告诉你的环境/ os使用bash作为命令解释器。这是硬编码的东西。
每个系统都有自己的shell,系统将用它来执行自己的系统脚本。这个系统的shell可以根据操作系统的不同而变化(大多数情况下它会是bash,Ubuntu最近使用dash作为默认的系统shell)。当你指定#!/ bin/sh时,系统将使用它的内部系统shell来解释你的shell脚本。
访问此link欲了解更多信息,我已经解释了这个话题。
希望这会消除你的困惑......祝你好运。
- 1. 这个bash脚本是什么意思
- 2. 什么意思 - 在bash脚本中?
- 3. 什么是=>在我的bash脚本中的意思
- 4. bash脚本中的$ {0%/ *}是什么意思?
- 5. 在sh/Bash shell脚本中,##(bang-pound)是什么意思?
- 6. unix bash脚本编制[-a]是什么意思?
- 7. perf脚本输出是什么意思?
- 8. “无效脚本”是什么意思?
- 9. 这个脚本是什么意思
- 10. 在shell脚本中,。[!。] *是什么意思?
- 11. shell脚本中的##是什么意思
- 12. 是什么意思〜在unix Shell脚本
- 13. 是什么意思:是什么意思?
- 14. '$?'是什么意味着在bash脚本?
- 15. $ {PWD:A}是什么意思?
- 16. // g是什么意思?
- 17. Bash中的$ {2: - $ {1}}是什么意思?
- 18. 在bash中,dir = $ {0%/ *}是什么意思?
- 19. “set - $ VARIABLE”在bash中是什么意思?
- 20. `/ * @`是什么意思?
- 21. #在bash脚本中的数组名前面有什么意思?
- 22. Shell脚本:shell脚本中的-z是什么意思?
- 23. RETVAL是什么意思?
- 24. “*&”是什么意思?
- 25. %%是什么意思?
- 26. 什么是bash/zsh“|&”语法是什么意思?
- 27. javascript:/ * @ @ * /是什么意思?
- 28. ON [PRIMARY]是什么意思?
- 29. 是什么意思$循环= @()
- 30. bash脚本是什么:= for?
@anishsane您的评论激励我写下这个消失的文件 echo -e'#!/ bin/rm \ nGoodbye!' >消失&& chmod 700消失&& ./vanish &&猫消失 –