设置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

你可以在这里找到很多其他陷阱的用法。