web-dev-qa-db-ja.com

ashのパイプの最初のコマンドのエラーコードを取得する

wgetを使用して、次のような2つのFIFOに大きなファイルをダウンロードします。

wget <wget-args> -O - | tee -a "$fifo1" >> "$fifo2"

失敗時にwgetのエラーコードを取得したい。

set -o pipefailはパイプ内の右端のコマンドのエラーコードを返すため、エラーコードがwgetからのものであるかどうかはわかりません。

では、どうすれば灰でそれを行うことができますか?

2
K. Koovalsky

Wgetのリターンコードをファイルにリダイレクトするだけです。ここでは$?リターンコードが含まれています

$ (wget <wget-args> -O - ; echo $? > result) | tee -a "$fifo1" >> "$fifo2"

ここで、ファイルの結果には、操作のステータスコードが含まれます

$ cat result
  0
2
Arushix