すべてのコマンドが発生したときにエコーされるようにする 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
スクリプトによってパイプの順序を変更するのではなく、コマンドが記述されたとおりにエコーされるようにするにはどうすればよいですか?