什么是`bash -x`

Ala*_*orm 2 bash debugging

一位同事最近向我介绍bash -x了调试我的 bash 脚本而不走echo $foo路线。

$ bash -x hello-world.sh 
+ echo 'Hello World'
Hello World
Run Code Online (Sandbox Code Playgroud)

在内部——bash 如何做到这一点?我检查了man bash它(似乎没有?)-x在调用解释器时提到了这个标志。我主要是在寻找将在-x环境中调试和不调试的概述,或任何其他问题。

Ben*_*ern 8

-xxtrace与带有-obash 选项的设置相同。从我的 bash 联机帮助页副本中:

扩大后的每个简单的命令命令,壳体命令,选择命令,或算术命令,显示扩展后的值PS4,接着所述命令和它的膨胀的参数或相关联的单词列表。

我不认为有很多“问题”:它打印它执行的每个命令。我想如果您正在解析stderrshell 脚本的输出,这可能会搞砸,因为命令被打印到stderr(又名文件描述符 2),但这似乎是一种极端情况。

(您也可以有条件地在脚本内部或交互式 shell 会话中启用set -x它,set +x以将其打开并再次关闭。)