Bash:执行前打印每个命令?

设置一个打印每个命令的bash脚本执行之前,最好的方法是什么?

这对于debugging目的会很好。

我已经试过这个:

CMD="./my-command --params >stdout.txt 2>stderr.txt" echo $CMD `$CMD` 

它应该做的是首先打印这个:

 ./my-command --params >stdout.txt 2>stderr.txt 

然后执行./my-command --params ,将输出redirect到指定的文件。

 set -o xtrace 

要么

 bash -x myscript.sh 

这与标准的/ bin / sh以及IIRC(这可能是POSIX的东西)

请记住,有bashdbbash Shell Debugger, release 4.0-0.4


要恢复正常,请退出子shell或

 set +o xtrace 

最简单的方法是让bash做到这一点:

 set -x 

或者以bash -x myscript显式运行。

设置-x是好的,但如果你做这样的事情:

 set -x; command; set +x; 

这将导致打印

 + command + set +x; 

你可以使用一个子shell来防止如:

 (set -x; command) 

这将只是打印命令。

set -x是好的。

打印每个执行的命令的另一种方法是使用DEBUG trap 。 把这一行放在脚本的开头:

 trap 'echo "# $BASH_COMMAND"' DEBUG 

你可以在这里find很多其他的trap用法。