`set -x`做什么?

时间:2016-03-29 00:58:09

标签: linux bash unix scripting

我有一个shell脚本,其中包含以下行:

[ "$DEBUG" == 'true' ] && set -x

3 个答案:

答案 0 :(得分:225)

set -x启用shell的模式,其中所有执行的命令都打印到终端。在您的情况下,它明确用于调试,这是set -x的典型用例:在执行时打印每个命令可以帮助您可视化脚本的控制流,如果它不起作用预期

答案 1 :(得分:55)

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已经过评估。

要详细了解set→访问this link

当涉及到你的shell脚本时,

[ "$DEBUG" == 'true' ] && set -x

当执行模式选为DEBUG时,您的脚本可能已经打印了一些额外的信息行。传统上,当使用可选参数(例如-d

)调用脚本时,人们习惯启用调试模式

答案 2 :(得分:2)

  

-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