巴什·谢邦

如果您通过阅读其他人的代码来学习Bash脚本,则可能已经注意到脚本的第一行以 #! 字符和Bash解释器的路径。

此字符序列(#!) 叫做 社bang 并且用于告诉操作系统使用哪个解释器来解析文件的其余部分。

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将使用该默认解释器进行解析。 例如,默认解释器用于 bashbash 和为 zshsh。 为了确保您的脚本将始终使用Bash进行解释,您需要使用shebang指定可执行路径。

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

  1. 使用bash二进制文件的绝对路径:

    #!/bin/bash
  2. 使用 env 效用:

    #!/usr/bin/env bash

使用第二种方法的优点是它将搜索 bash 在用户的可执行文件 $PATH 环境变量。 如果有多个路径 bash,脚本将使用第一个。

当使用第一个选项向Bash shell提供程序添加选项时,将其传递给解释器。 例如,要以调试模式运行脚本,可以使用 #!/bin/bash -x。 如果您使用的是 env 方法,那么你需要使用 set 声明选项。 要启用调试模式,您需要添加 set -x 在射帮线之后。

脚本示例

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

nano hello_world

你好,世界

#!/bin/bash

echo "Hello, World"

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

chmod +x hello_world

现在,如果您可以通过键入以下内容来运行脚本 ./ 后跟脚本名称:

./hello_world
Hello, World

压制Shebang#

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

例如,运行具有以下内容的脚本 #!/bin/sh 在Shebang行中使用 bash 您将键入的shell:

bash hello_world

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

结论#

到目前为止,您应该对Shebang是什么以及如何在Bash脚本中使用它有了很好的了解。

如果您有任何疑问或反馈,请随时发表评论。

bash终端

Sidebar