16

wgetサブシェルプロセスから終了コードを取得するにはどうすればよいですか?

それで、主な問題はそれ$?が 0 に等しいということ$?=8です。

$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "$?"
0

tee実際にはなくても動作します。

$> OUT=$( wget -q "http://budueba.com/net" ); echo "$?"
8

しかし、${PIPESTATUS}配列(そのケースに関連しているかどうかはわかりません)にもその値は含まれていません。

$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "${PIPESTATUS[1]}"    

$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "${PIPESTATUS[0]}"
0

$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "${PIPESTATUS[-1]}"
0

だから、私の質問は -サブシェルwgetを介して終了コードを取得するにはどうすればよいですか?tee

参考になれば、私の bash バージョンは4.2.20.

4

3 に答える 3

22

を使用$()することで、(効果的に) サブシェルを作成しています。したがって、環境変数は子プロセスから親プロセスに伝播しないため、PIPESTATUS確認する必要があるインスタンスはサブシェル内 (つまり 内) でのみ使用できます。$()

次のようなことができます。

  OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt"; exit ${PIPESTATUS[0]} );
  echo $? # prints exit code of wget.

以下を使用して、同様の動作を実現できます。

  OUT=$(wget -q "http://budueba.com/net")
  rc=$? # safe exit code for later
  echo "$OUT" | tee -a "file.txt"
于 2012-02-14T13:42:26.867 に答える