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
)
Jos*_*oyd 12
当脚本中的第一个字符#!
被称为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
.
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脚本.
请访问此链接以获取我已解释此主题的更多信息.
希望这会消除你的困惑......祝你好运.