Bash here-文档和 shebang 行

Bash here-文档和 shebang 行

是否真的可以得出这样的结论:当使用 bash here-doc 之类的bash << HEREDOC,那么总是无一例外,shebang 行之类的#!/bin/bash -x都是多余的?

如果我必须打赌,我敢打赌,是的,它们将是多余的,只能使用我们来组织信息,就像一个标牌对新用户说“以下命令集最初是从传统脚本执行的,不要不要用双与号或其他类似的方式在一行中运行它们”。

我想知道专家怎么说 - 使用此处文档时 bash shebang 行真的完全多余吗?

答案1

是的,在这种情况下。

摘要:仅当 hash-bang 行(也称为“shebang”等)位于未显式指定其解释器的情况下运行的可执行脚本中时才需要(就像执行二进制可执行文件时一样)。

对于您的代码,您已经在此处文档中显式运行脚本bash。无需添加 hash-bang,因为它将被视为评论。

由于此处文档脚本似乎希望使用-x选项集来执行(从 来看#!/bin/bash -x),因此您必须set -x在此处文档内部使用才能获得与将此处文档作为其自己的脚本运行相同的效果,再次,因为 hash-bang 被视为评论。

hash-bang 行在执行可执行文本文件时使用。该行告诉系统使用哪个解释器来执行它,并且可以选择允许您为该解释器指定一个参数(-x在您的情况下)。

如果您要将此处文档写入稍后将用作脚本的文件,则需要那里的 hash-bang。例如:

cat >myscript.sh <<<END_OF_SCRIPT
#!/bin/bash
# contents of script
# goes here
END_OF_SCRIPT

这样的文件还必须是可执行的 ( chmod +x myscript.sh)。但同样,如果您要使用 显式执行该脚本bash,例如通过

$ bash ./myscript.sh

或者

$ bash -x ./myscript.sh

(或等效地在另一个脚本中)则不需要 hash-bang,并且该脚本不必可执行。

这一切都取决于您希望如何执行脚本。

另请参阅维基百科条目舍邦

相关内容