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的东西)
请记住,有bashdb ( bash 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
用法。