一位同事最近向我介绍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
环境中调试和不调试的概述,或任何其他问题。
-x
xtrace
与带有-o
bash 选项的设置相同。从我的 bash 联机帮助页副本中:
扩大后的每个简单的命令,对命令,壳体命令,选择命令,或算术为命令,显示扩展后的值PS4,接着所述命令和它的膨胀的参数或相关联的单词列表。
我不认为有很多“问题”:它打印它执行的每个命令。我想如果您正在解析stderr
shell 脚本的输出,这可能会搞砸,因为命令被打印到stderr
(又名文件描述符 2),但这似乎是一种极端情况。
(您也可以有条件地在脚本内部或交互式 shell 会话中启用set -x
它,set +x
以将其打开并再次关闭。)