1

パイプの終了コードを伝搬するための「set-opipefail」について知っています。ただし、入力リダイレクトについても同様のことをしたいと思います。具体的には、これを実現したいと思います。

$ cat <(echo abc; exit 1) 
abc
$ echo $?
1

現在の動作では、最後の行は「1」ではなく「0」です。

どうすればこれを達成できますか?いいえ、パイプは使用できません。私が挙げた例は、単純化されたテストケースです。実際には、私は複数のソースから入力を受け取っています。

4

2 に答える 2

0

残念ながら、入力リダイレクトではそれを行うことはできません。たぶん、入力を提供するプロセスに終了ステータスをファイルに書き込んでもらい、後でそれをチェックさせるのでしょうか?

于 2012-05-08T16:14:22.397 に答える
0

@Larsが提案する一時ファイルを使用した例をここに示します。

tmp=`mktemp`; sort -mk1 <(zcat 1.gz || rm -f $tmp) <(zcat 2.gz || rm -f $tmp) && rm $tmp

ソートが成功し、2 つの zcat が成功した場合、戻りコードは「成功」(ゼロ) になります。

于 2012-05-11T17:30:30.537 に答える