のようなパイプラインの何かを考えると、 "A | B | C | D | E"、私はこのような工程Bの何かの結果にステップCを条件付きにしたい:条件付きステップ
A | B | if [ $? -ne 0 ]; then C; else cat; fi | D | E
しかし、これは動作していないようです。 Bの結果に関係なく、Cは決して実行されません。私はより良い解決策を探しています。
私はパイプラインの各ステップがそれ自身のサブシェルで実行されることを理解します。だから私はパイプラインに戻って環境変数を渡すことはできません。しかし、このパイプラインはGnu並列環境にあり、多くのパイプラインが同時に実行されており、データストリームだけを処理し、ソースを知る必要はなく、親スクリプトが必要な分離を処理します。これは、ファイル名を一意にする方法がないため、一時ファイルを使用することも実用的ではないことを意味します。 $$でも各ステップで同じ価値があるとは思われません。
'set -o pipefail'を見るかもしれませんが、より現実的には、単一のパイプラインを使うのではなく、コマンドを分割するだけです。 –