Answers:
set -x
启用外壳程序的一种模式,其中所有执行的命令都将打印到终端。在您的情况下,它显然是用于调试的,这是典型的用例set -x
:在执行命令时打印每个命令,如果脚本未按预期运行,则可以帮助您可视化脚本的控制流。
set +x
禁用它。
set +x
禁用它。
set -e
在脚本顶部,每当发生错误(并且未明确处理)时,脚本都会退出并显示错误。我发现这比默认值要好得多,默认值是随心所欲(例如Visual Basic的臭名昭著On Error Resume Next
)。
set -e
具有非常不希望的副作用,以至于几乎无法进行代码审查(因为给定行的行为取决于调用堆栈中的内容-如果在“检查”上下文中调用了函数,set -e
则被禁用了)该调用及其依次调用的所有内容)。请参阅BashFAQ#105中的练习。
set -x
在扩展它们之前和执行它们之前,为命令,大小写命令,选择命令以及命令及其参数或关联的单词列表打印简单命令的痕迹。扩展PS4变量的值,并在命令及其扩展的参数之前打印结果值。
[ 来源 ]
set -x
echo `expr 10 + 20 `
+ expr 10 + 20
+ echo 30
30
set +x
echo `expr 10 + 20 `
30
上面的示例说明的用法set -x
。使用时,上述算术表达式已被扩展。我们可以看到单线是如何逐步评估的。
expr
已经过评估。echo
已经过评估。要了解有关设置的更多信息,请访问此链接
当涉及到您的shell脚本时,
[ "$DEBUG" == 'true' ] && set -x
当执行模式选择为时,脚本可能正在打印一些其他信息行DEBUG
。传统上,当脚本使用可选参数调用时,例如:-d
-u:默认禁用。激活后,使用未配置的变量时将显示错误消息。
-v:默认为不活动。激活后,将显示信息的原始内容(无可变分辨率),然后输出信息。
-x:默认情况下不活动。如果激活,将在运行命令之前显示命令内容(在变量解析之后,将带有++符号)。
比较以下差异:
/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root
/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root
/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET
help -m set | less