我的标准做法是在 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 的要求太多了?