パイプ記号を含むコマンドライン全体をエコーできますか?

パイプ記号を含むコマンドライン全体をエコーできますか?

私の標準的な慣行は、シェルスクリプトで次のイディオムを使用することです。

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」オプションを追加し、コマンドを実行する前にstdoutにコマンドをほぼシームレスにエコーしたり、コマンドの実際の実装を抑制したりできます。私はこれがかなり一般的なイディオムだと思います。

しかし、これが私が詰まっている場所です。

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

doCmd tail -n +2 test.log明らかにgrepを介して出力を実行してパイプします。しかし、私が本当に望むのは、「|」の行全体をエコーし​​てすべて標準出力に出力してから、作成したとおりに実行することです。

これは非常に簡単なことですか、それともシェルにあまりにも多くを要求していますか?

ベストアンサー1

おすすめ記事