在 Linux 脚本中使用 Shebang #!


介绍

在 Linux 系统中,Shebang(#!)是脚本开头的一行特殊指令,它告诉操作系统在执行脚本时使用哪个解释器。这一行也被称为 **哈希邦 (hashbang)**、**沙邦 (shabang)** 或“**井号感叹号**”,它是脚本的第一行,以“#!”开头,后跟解释器的路径。Shebang 行很重要,因为它允许你在 Linux 系统上运行用任何语言编写的脚本,而不仅仅是 shell 脚本。

理解 Shebang

什么是 Shebang?

**Shebang “#!”** 这个符号指示在运行脚本时使用哪个解释器或哪个版本的解释器。它也称为“井号感叹号”、“沙邦”、“哈希邦”或“磅邦”。这个名称据信起源于“**SHarp bang**”或“**haSH bang**”的部分缩写。

Shebang 始终是脚本的第一行。由于它以“#”符号开头,包含 Shebang 的行不会被 shell 处理。当 Linux 系统执行文本文件时,它将 Shebang 视为 shell 指令。它找到正确的解释器并运行它,并将文件名作为输入传递给解释器。例如,运行名为“**~/scripts/shebang**”的文件,该文件以 Shebang “**#!/bin/sh**”开头,在功能上等效于运行“** /bin/sh ~/scripts/shebang**”命令。要进行正确的处理,文本文件必须是可执行的。

Shebang 的重要性

**Shebang** 指令具有以下优点:

  • 允许用户将脚本和文件作为命令执行。

  • 隐藏某些实现细节,例如 **解释器** 的名称。

  • 不需要用户知道解释器的绝对路径或如何使用 **env** 命令。

  • 允许使用特定版本的解释器,例如 **python2** 与 **python3**。

  • 允许更改解释器,同时保持相同用户的行为和命令。

  • 可以自动将强制选项传递给解释器。

如果解释器路径是硬编码的,则可能会出现潜在的缺点。如果解释器的位置发生更改,则必须同时更新 Shebang 指令。否则,脚本可能会停止工作。

在脚本中使用 Shebang

Shebang 格式

**Shebang** 指令遵循以下格式:

#!interpreter [options]

这是一个 Shebang 指令的实际示例。此 Shebang 需要使用 Bourne sh shell 来运行脚本。此示例使用绝对路径来定义解释器。

#!/bin/sh

env 实用程序可以帮助查找解释器的路径。在这种情况下,**Shebang** 告诉系统使用“**/usr/bin/env**”来找出 **python2** 解释器的路径。此技术更健壮,因为即使路径更改,它也能继续工作。

#!/usr/bin/env python2

使脚本可执行

将 **shebang** 行添加到脚本后,需要使脚本可执行。为此,可以使用带有“+x”选项的 chmod 命令。例如:

$ chmod +x script.py

此命令使“script.py”文件可执行。

运行脚本

使脚本 **可执行** 后,只需在命令行键入其名称并按 Enter 键即可运行它。例如:

$ ./script.py

此命令运行“script.py”文件。

Shebang 最佳实践

遵循的规则

为了有效地实现 Shebang,请记住以下规则。

  • 指令必须始终以“#!”字符组合开头

  • 为了使此方法正常工作,**Shebang** 必须出现在文件的首行。如果它出现在其他位置,则会被视为注释。

  • 指定解释器的完整绝对路径或使用 env 来查找正确的路径。在 **解释器** 名称后插入解释器选项。编译器选项的实现细节因不同的系统而异。但是,所有主要操作系统至少支持一个选项。

  • “#!”字符组合和解释器名称之间允许一个或多个空格,但不是必需的。例如,#!interpreter 和#!interpreters 指令都是有效的,并且在功能上是等效的。

  • Linux 允许第二个脚本充当第一个脚本的解释器,但并非所有操作系统都是如此。

Shebang 特殊指令

“**#!/bin/false**”指令是一个特殊的 Shebang。它立即退出并返回错误状态。防止某些系统文件在其适当的上下文之外运行。

结论

**Shebang** 行是一个重要的工具,允许你在 Linux 系统上运行用任何语言编写的脚本。它告诉操作系统在运行脚本时使用哪个 **解释器**,并且是脚本的第一行。Shebang 行有几个优点,例如允许用户将脚本和文件作为命令处理,隐藏实现细节,并允许使用特定版本的解释器。将 shebang 行添加到脚本并使其可执行后,只需在命令行键入其名称即可运行它。借助 Shebang 行,你可以轻松地使用适当的解释器在 Linux 系统上运行任何语言编写的脚本。需要注意的是,如果 shell 路径是 **硬编码的**,并且 shell 位置发生变化,则必须在 shell 中更新 **shebang** 指令。

更新于:2023年2月13日

6000+ 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始
广告