1 shell-script here-document shebang
是否可以得出这样的结论:当使用 bash here-doc like 时bash << HEREDOC
,那么总是无一例外,shebang 行 like#!/bin/bash -x
是多余的?
如果我必须打赌,我敢打赌是的,它们将是多余的,只能使用我们来组织信息,就像一个标志说新用户“以下命令集最初是从传统脚本执行的,不要不要用双符号或其他类似方式将它们排成一行”。
我想知道专家怎么说 - 使用 here-doc 时,bash shebang 行真的是完全多余的吗?
是的,在这种情况下。
摘要: 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的维基百科条目。