设置Bash脚本在执行每个命令之前打印该命令的最佳方法是什么?
这对于调试来说非常有用。
我已经试过了:
CMD="./my-command --params >stdout.txt 2>stderr.txt"
echo $CMD
`$CMD`
它应该先打印这个:
./my-command --params >stdout.txt 2>stderr.txt
然后执行。/my-command——params,将输出重定向到指定的文件。
设置Bash脚本在执行每个命令之前打印该命令的最佳方法是什么?
这对于调试来说非常有用。
我已经试过了:
CMD="./my-command --params >stdout.txt 2>stderr.txt"
echo $CMD
`$CMD`
它应该先打印这个:
./my-command --params >stdout.txt 2>stderr.txt
然后执行。/my-command——params,将输出重定向到指定的文件。
当前回答
最简单的方法是让bash来做:
set -x
或者显式地运行bash -x myscript。
其他回答
Set -x是可以的,但是如果你这样做:
set -x;
command;
set +x;
这将导致印刷
+ command
+ set +x;
你可以使用子shell来防止这种情况,例如:
(set -x; command)
这只会打印命令。
set -o xtrace
or
bash -x myscript.sh
这适用于标准的/bin/sh以及IIRC(它可能是POSIX的东西)
记住,还有bashdb (bash Shell Debugger, release 4.0-0.4)
若要恢复正常,请退出subshell或
set +o xtrace
最简单的方法是让bash来做:
set -x
或者显式地运行bash -x myscript。
Set -x很好。
打印每个执行的命令的另一种方法是使用trap和DEBUG。 把这一行放在脚本的开头:
trap 'echo "# $BASH_COMMAND"' DEBUG
你可以在这里找到很多其他陷阱的用法。