一位同事最近向我介绍了如何bash -x
在不走路线的情况下调试我的 bash 脚本echo $foo
。
$ bash -x hello-world.sh
+ echo 'Hello World'
Hello World
在内部——bash 是如何实现这一点的?我检查了一下man bash
,它(似乎没有?)-x
在调用解释器时提到了该标志。我主要是寻找有关在环境中将调试和不会调试的内容-x
或任何其他问题的概述。
答案1
-x
xtrace
与-o
bash 选项的设置相同。从我的 bash 联机帮助页副本中:
分别展开后简单的命令,为了命令,案件命令,选择命令或算术为了命令,显示扩展值PS4,后跟命令及其扩展参数或关联的单词列表。
我不认为这有很多“陷阱”:它打印它执行的每个命令。我想如果您正在解析stderr
shell 脚本的输出,这可能会搞砸,因为命令被打印到stderr
(也称为文件描述符 2),但这似乎是一种极端情况。
(您还可以有条件地在内部脚本或交互式 shell 会话中启用此功能,以set -x
将其打开并set +x
再次关闭。)