可以回显整个命令行,包括管道符号吗?

可以回显整个命令行,包括管道符号吗?

我的标准做法是在 shell 脚本中使用这个习惯用法:

doCmd() {
    if $verbose; then echo "$@" >&2; fi
    if $really; then "$@"; fi
}

...

echo Begin whatever this script is doing
doCmd rm -rf test_results_dir
doCmd cd test_results_dir
doCmd run_lengthy_test

正如您所看到的,这个习惯用法让我可以向所有脚本添加“-v”和“-n”选项,并在运行命令之前几乎无缝地将命令回显到标准输出,和/或抑制命令的实际执行。我认为这是一个相当常见的习语。

但这就是我陷入困境的地方:

doCmd tail -n +2 test.log | grep total > summary.log

显然,它运行doCmd tail -n +2 test.log,并通过 grep 管道输出。但我真正想要发生的是回显整行“|”并全部输出到标准输出,然后按编写的方式运行它。

这是相当容易做到的,还是我对 shell 的要求太多了?

相关内容