Bash here-documents 和 shebang 行

1 shell-script here-document shebang

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

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

我想知道专家怎么说 - 使用 here-doc 时,bash shebang 行真的是完全多余的吗?

Kus*_*nda 6

是的,在这种情况下。

摘要: hash-bang 行(也称为“shebang”和其他东西)只有在未明确指定其解释器的情况下运行的可执行脚本中才需要(就像执行二进制可执行文件时一样)。

对于您的代码,您已经明确地在 here-document 中运行脚本bash。无需添加 hash-bang,因为它将被视为注释。

由于 here-document 脚本似乎想要使用-x选项集来执行(从 判断#!/bin/bash -x),您必须set -x在 here-document 内部使用才能获得与将 here-document 作为其自己的脚本运行相同的效果,再次,因为 hash-bang 被视为注释。

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

如果您将 here-document 写入稍后将用作脚本的文件,则您确实需要那里的 hash-bang。例如:

cat >myscript.sh <<<END_OF_SCRIPT
#!/bin/bash
# contents of script
# goes here
END_OF_SCRIPT
Run Code Online (Sandbox Code Playgroud)

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

$ bash ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

或者

$ bash -x ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

(或等效地从另一个脚本中)那么不需要 hash-bang,并且脚本不必变得可执行。

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

另请参阅Shebang的维基百科条目。