我以前做过Bash脚本,没有#它们都运行得很好!/bin/bash。
放进去有什么意义?事情会有什么不同吗?
还有,#怎么发音?我知道!发音为“bang”。
#!明显吗?
我以前做过Bash脚本,没有#它们都运行得很好!/bin/bash。
放进去有什么意义?事情会有什么不同吗?
还有,#怎么发音?我知道!发音为“bang”。
#!明显吗?
当前回答
“Bourne-Again shell”的Bash标准只是众多可用标准中的一种 Linux中的shell。
shell是一个接受并运行命令的命令行解释器。
Bash通常是大多数Linux发行版中的默认shell。这就是bash的原因 shell的同义词。
shell脚本通常具有几乎相同的语法,但有时也有所不同。例如,数组索引在Zsh中从1开始,而在bash中从0开始。一个脚本 写的Zsh shell将不会在bash中工作,如果它有数组。
为了避免令人不快的意外,您应该告诉解释器您的shell脚本 是为bash shell编写的。你是怎么做到的?
简单地开始您的bash脚本到#!/bin/bash
其他回答
每个发行版都有一个默认shell。Bash是大多数系统的默认设置。如果您恰巧在一个具有不同默认shell的系统上工作,那么如果脚本是专门为Bash编写的,那么它们可能无法正常工作。
Bash多年来一直在从ksh和sh中获取代码。
添加# !/bin/bash作为脚本的第一行,它告诉操作系统调用指定的shell来执行脚本中接下来的命令。
#! 通常被称为"hash-bang", "she-bang"或"sha-bang"。
它被称为shebang。它由一个数字符号和一个感叹号字符(#!)组成,后面跟着到解释器的完整路径,例如/bin/bash.UNIX和Linux下的所有脚本都使用第一行中指定的解释器执行。
这叫shebang。在unix语言中,#被称为sharp(就像在音乐中)或hash(就像twitter上的标签),而!叫做bang。(实际上,您可以使用!!,叫bang-bang)。所以当组合在一起时,你会得到haSH-BANG,或shebang。
#!告诉Unix使用什么程序来运行它。如果它没有指定,它将尝试使用bash(或sh,或zsh,或任何你的$SHELL变量),但如果它在那里,它将使用该程序。另外,#在大多数语言中是注释,因此在后续执行中会忽略该行。
更准确地说,shebang #!,当它是可执行(x模式)文件的前两个字节时,由execve(2)系统调用(执行程序)解释。但是POSIX对execve的规范没有提到shebang。
它必须跟在解释器可执行文件的文件路径后面(BTW甚至可以是相对的,但大多数情况下是绝对的)。
在用户的$PATH中找到解释器(例如python)的一个很好的技巧(也许不是那么好的一个)是使用env程序(在所有Linux上总是在/usr/bin/env),例如:
#!/usr/bin/env python
任何ELF可执行文件都可以是解释器。你甚至可以使用#!/bin/cat或#!/bin/true如果你想!(但这通常是没有用的)
“Bourne-Again shell”的Bash标准只是众多可用标准中的一种 Linux中的shell。
shell是一个接受并运行命令的命令行解释器。
Bash通常是大多数Linux发行版中的默认shell。这就是bash的原因 shell的同义词。
shell脚本通常具有几乎相同的语法,但有时也有所不同。例如,数组索引在Zsh中从1开始,而在bash中从0开始。一个脚本 写的Zsh shell将不会在bash中工作,如果它有数组。
为了避免令人不快的意外,您应该告诉解释器您的shell脚本 是为bash shell编写的。你是怎么做到的?
简单地开始您的bash脚本到#!/bin/bash