Bash Shebang

时间:2020-03-05 15:31:39  来源:igfitidea点击:

如果我们通过阅读别人的代码来学习Bash脚本,我们可能已经注意到脚本的第一行以'#!'开头。
字符和Bash解释器的路径。

此字符序列('#!')称为shebang,用于告诉操作系统使用哪个解释器来解析文件的其余部分。

Bash Shebang 解释器指令

Shebang解释器指令采用以下形式:

#!interpreter [arguments]
  • 该指令必须是脚本中的第一行。
  • 该指令必须以shebang'#!'开头。
  • shebang字符后的空白是可选的。
  • 解释器是二进制文件的完整路径(例如:'/bin/sh','/bin/bash')。
  • 解释器参数是可选的。

例子:

  • '#!/bin/bash'-使用'bash'解析文件。
  • '#!/usr/bin/env perl'-使用'env'命令查找'perl'可执行文件的路径。
  • '#!/usr/bin/python'使用'python'二进制文件执行文件。

在Bash脚本中使用Shebang

如果未指定shebang,并且运行Bash脚本的用户正在使用另一个Shell,则该Shell将使用该默认解释器进行解析。
例如,'bash'的默认解释器是'bash',而'zsh'的默认解释器是'sh'。
为了确保脚本始终能被Bash解释,我们需要使用shebang指定可执行路径。

有两种使用Shebang指令和设置解释器的方法。

  • 使用bash二进制文件的绝对路径:
#!/bin/bash
  • 使用“ env”实用程序:
#!/usr/bin/env bash

使用第二种方法的优点是它将在用户的“ $PATH”环境变量中搜索“ bash”可执行文件。

如果“ bash”有多个路径,则脚本将使用第一个路径。

当使用第一个选项向Bash shell提供程序添加选项时,将其传递给解释器。
例如,要以调试模式运行脚本,可以使用'#!/bin/bash -x'。
如果我们使用的是'env'方法,则需要使用'set'来声明该选项。
要启用调试模式,可以在shebang行之后添加“ set -x”。

示例脚本

让我们使用shebang创建一个简单的脚本,该脚本将显示“ Hello,World”。
打开文本编辑器并粘贴以下行:

nano hello_world

你好,世界

#!/bin/bash
echo "Hello, World"

为了能够在不从命令行指定解释器的情况下运行脚本,我们需要将文件设置为可执行文件:

chmod +x hello_world

现在,如果我们可以通过键入“ ./”后跟脚本名称来运行脚本,则:

./hello_world
Hello, World

覆盖Shebang

如果出于某种原因要覆盖Shebang行中的解释器集,则需要通过显式指定所需的shell来运行脚本。

例如,使用“ bash” shell运行在Shebang行中指定了“#!/bin/sh”的脚本,我们可以输入:

bash hello_world

请注意,覆盖shell解释器不是一个好主意,因为它可能导致脚本的意外行为。