我正在编写一个 Bash 脚本,想让所有的命令在执行时都被打印出来。我知道需要使用
例如,假设我有这个非常简单的 Bash 脚本:
set -x
和 set +x
来分别开启和关闭这种行为(参考SOF帖子)。然而,它并不会打印所有内容,例如 I/O 重定向。例如,假设我有这个非常简单的 Bash 脚本:
set -x
./command1 > output1
./command2 arg1 arg2 > output2
这将是输出结果
+ ./command1
+ ./command2 arg1 arg2
Bash不能将stdout重定向到output1和output2。为什么会这样?我该如何实现这种行为?也许在脚本中有一个必须设置的shopt
选项?
注意:我还注意到管道不会按预期打印。例如,如果我使用以下命令:
set -x
./command3 | tee output3
我将会得到这个输出:
+ tee output3
+ ./command3
如何使命令显示的方式与它们书写时完全一致,而不是被脚本重新排序?