失敗後にカスケードパイプラインコマンドを続行する方法

失敗後にカスケードパイプラインコマンドを続行する方法

コマンドを実行して独自のスクリプトを使用して出力を操作していますが、スクリプトが失敗してもデフォルトのコマンドを停止したくありません。

たとえば、

a-command | tee logfile.txt | myscript

私のスクリプトが途中で失敗した場合はlogfile.txtを見て、私のスクリプトが動作を停止した場所で中断されることを確認してください。しかし、私が望むのは、aコマンドが実行され続け、logfile.txtに完全なログがあることです。スクリプトをデバッグしてエラーを修正できます。

最初の2つの部分(コマンドとティー)がそのタスクを実行するように最後のパイプ部分をオプションとして処理するか、エラーが無視されるようにコマンドを変更するにはどうすればよいですか?

【編集】a-command長い作業です。私のスクリプトは、デフォルトでより良いレポート状態のためにコマンドが実行されている間に出力を操作します。だからa-command作業を終えたら、スクリプトを実行したくありません。

ベストアンサー1

a-command | tee logfile.txt | { myscript; cat >/dev/null; }

myscriptその後、何らかの理由で終了するまで、通常どおりパイプラインが最初に実行されます。この時点では、データが到着しなくなるまでcat読み取り操作が続きますtee。読み取ったデータはcatパイプで接続されて削除されます/dev/null

最初に終了/失敗せずに完了すると、もはやa-commandデータを読み取ることができず、終了(?)される可能性があります。シャットダウン時に開始されますが、読み取るデータがないため、すぐにシャットダウンしてパイプが完了します。myscriptmyscriptmyscriptcat


ツーティのトラブルシューティングコメントパイプの正しい終了ステータスが引き続き表示されることを確認してください。

a-command | tee logfile.txt | ( myscript; err=$?; cat >/dev/null; exit "$err" )

おすすめ記事