我见过几个带有以下 shebang 的 shell 脚本:
#!/bin/bash -x -v
然而,man bash
没有解释这些论点-x
和-v
代表什么,如果它们属于的bash
话。
那么这些-x
和-v
(以及其他可能的论点)是什么意思呢?
答案1
来自man bash
(是的,这是一个很大的手册页,通常谷歌搜索更快):
-x
展开每个简单命令、for 命令、case 命令、select 命令或算术 for 命令后,显示 PS4 的展开值,后跟该命令及其展开参数或关联的单词列表。
有效:当您运行脚本时,它将显示该脚本中完成的所有操作。因此所有 if、循环和命令都会运行。对于调试非常有用。
-v
在读取 shell 输入行时打印它们。运行脚本时,它将在读取文件时打印整个脚本。当您以交互方式使用 shell 时,按 Enter 键后它将显示每个命令。
上面的引号来自set
中内置命令的解释man bash
,这也解释了 的选项set
也可以作为参数传递(在 shebang 行上):
除非另有说明,这些选项默认处于关闭状态。使用
+
而不是-
会导致这些选项被关闭。 还可以将选项指定为 shell 调用的参数。 当前的选项集可以在 中找到$-
。除非遇到无效选项,否则返回状态始终为 true。
答案2
bash 手册页做暗示这些选项实际上在下面进一步解释,但很容易被忽视。
因此,您的问题实际上应该是: bash 手册页的 OPTIONS 部分不完整。答案是复制它们,或者突出显示选项部分的第一部分:
OPTIONS
All of the single-character shell options documented in the descrip‐
tion of the set builtin command can be used as options when the shell
is invoked. [ ... ]
最后,为了完成这个任务:它们是任何 POSIX shell 的标准选项,用于在以下情况下显示脚本的代码:读(-v
) 什么时候跑步( -x
)。输出将出现在 stderr 上。