使用 shebang 行来执行脚本是否更好?

使用 shebang 行来执行脚本是否更好?

我正在查找 shebang,想知道为什么我要使用它。我可以使用以下命令执行 bash 脚本:

bash foo.sh

或者

./foo.sh

(在 foo.sh 中有一个 shebang 行)

每种方法都有哪些优点和缺点,我应该默认使用哪一种?

答案1

我想说是的,本质上使用 shebang 更好。

专业人士:

如果您将所有脚本放入您的$PATH(可能是/usr/local/bin~/bin)并将它们标记为可执行文件,那么您可以按名称执行它们,而无需考虑需要调用哪个解释器(bash、Python、Ruby、Perl 等)。

如果您将一个foo以 shebang 命名的可执行文件放在 中的任何位置$PATH,您只需键入foo即可执行它。

缺点:

您必须#!/bin/bash在顶部和chmod +x文件中键入。

这几乎是零成本,退货非常方便。

答案2

使用 hashbang 的主要原因是指定您想要使用的确切解释器。虽然编写可移植 shell 脚本很好,但人们通常依赖于特定 shell 的某些功能(单词“巴什主义”有现实世界的基础),因此需要明确什么是解释器。

它也不仅限于仅限脚本 - 除了 shell 脚本之外,hashbang 是必须的,否则系统将不知道如何处理该文件,并将尝试使用用户的默认 shell 解释脚本。这通常不是 AWK、Perl、Python、Ruby、Tcl/Tk...所需的操作。 AWK 实际上是 hasbang 重要性的另一个例子 - 各种实现之间存在细微的差异,并且需要特定的解释器可能是防止意外失望的好方法。这同样适用于仅版本 2/3 的 Python 脚本。

相关内容