为什么你需要把#!/ bin / bash放在脚本文件的开头?
我之前制作了Bash脚本,并且在开始时没有这些,他们都运行良好。 有什么意义? 会有什么不同吗?
另外,你如何发音#
? 我知道!
发音为“bang”。
#!
怎么样#!
发音?
这是一个约定,所以* nix shell知道要运行什么样的解释器。
例如,旧版本的ATT默认为sh(Bourne shell),而旧版本的BSD默认为csh(C shell)。
即使在今天(大多数系统运行bash,“Bourne Again Shell”),脚本也可以是bash,python,perl,ruby,PHP等。例如,您可能会看到#!/bin/perl
或#!/bin/perl5
。
PS:感叹号( !
)被亲切地称为“砰”。 shell注释符号( #
)有时称为“散列”。
PPS:记住 - 在* nix下,将后缀与文件类型关联仅仅是一种惯例,而不是“规则”。 可执行文件可以是二进制程序,也可以是百万个脚本类型中的任何一种。 因此需要#!/bin/bash
。
更准确地说,shebang #!
,当它是可执行文件( x
模式)的前两个字节时,由execve(2)系统调用(执行程序)解释。 但是execve
POSIX规范并没有提到shebang。
它必须跟着一个解释器可执行文件的路径(BTW甚至可以是相对的,但通常是绝对的)。
在用户的$PATH
找到一个解释器(例如python
)的一个很好的技巧(或者不太好)是使用env
程序(总是在所有Linux上的/usr/bin/env
),例如
#!/usr/bin/env python
任何ELF可执行文件都可以是解释器。 如果你愿意,你甚至可以使用#!/bin/cat
或#!/bin/true
! (但那往往是无用的)
它被称为shebang。 在unix中,#被称为尖锐(如音乐)或哈希(如Twitter上的主题标签),并且! 被称为爆炸。 (你可以用!!来引用你以前的shell命令,叫做bang-bang)。 所以放在一起时,你会得到haSH-BANG或者shebang。
#之后的部分! 告诉Unix用什么程序来运行它。 如果没有指定,它将尝试使用bash(或sh,或zsh或$ SHELL变量),但如果它在那里,它将使用该程序。 另外,#是大多数语言的注释,因此在随后的执行中该行被忽略。
链接地址: http://www.djcxy.com/p/97111.html上一篇: Why do you need to put #!/bin/bash at the beginning of a script file?