2010-12-17 14 views
6

私は現在、連鎖したコマンドのエラー処理方法を疑問視しています。以下は、簡単に私の問題を実証するための単なる一例である:bashスクリプトのチェーンコマンド(パイプ)によるエラー処理?

cat file | gzip >/tmp/test 

(例えばファイルがないため)が失敗した場合、GZIPはまだ実行され、したがって、で最後に保存された終了コードされます$?はです。 セット-eは、この場合には役に立ちません。

これには最適な解決策がありますか?

ありがとうございました!

trap 'echo "ERR caught"' ERR 
set -o pipefail 
cat file | gzip >/tmp/test 

出力ファイルがまだ(作成が並行して行われている)とgzipが実行されます作成されますが、あなたはクリーンアップを行うことができます。

+0

'$ PIPESTATUS'を試しましたか?それはbashのために働くはずです。 – khachik

+0

私は知らなかった、これは存在した。ありがとう! – aurora

答えて

8

これを試してみてください。 ${PIPESTATUS[@]}配列を使用して、エラーの発生場所を確認してください。エラーの詳細については、$BASH_COMMANDおよび$BASH_LINENOを使用してください。

+0

うわー - それはとてもクールです。私はこの可能性を知らなかった。どうもありがとう! – aurora

関連する問題