2番目のコマンドは、パイプラインの最初のコマンドの終了ステータスを取得します。

2番目のコマンドは、パイプラインの最初のコマンドの終了ステータスを取得します。

私の問題は次のようになります終了状態を別のプロセスにパイプにインポートするしかし、パイプラインから2番目のコマンドの終了状態を取得したいと思います。以内に管路。

ここに例があります -

false | echo $?

0期待よりも報酬1

PIPESTATUS以前のエラーコードを提供

false | echo $PIPESTATUS

0最初に返した後、 を返すと、1操作自体の後に結果が得られます。私の意図は、次のような関数を作成することです。

debug() {
  # Eventually will be formatted as JSON
  echo "$(cat) was the result and the error code was $?"
}

(
  echo "Foo"
  false # To simulate an error
) | debug # debug should return "Foo was the result and the error code was 1"

ベストアンサー1

パイプラインの両方の半分が実行されるため、これを行うことはできません。同時にしたがって、右側は左側が成功したかどうかはわかりません。目的のタスクを実行するには、まず左側のコマンドを実行してから終了するまで待つ必要があります。その後、コマンドの出力と終了コードを表示できます。

次のコードスニペットがあなたの目的に適している可能性があります。

myfunc() {
  echo foo
  read
}

out="$(myfunc)"
rc=$?
printf '%s was the result and the error code was %d\n' "$out" $rc

$ yes | ./test.sh 
foo was the result and the error code was 0
$ ./test.sh < /dev/null
foo was the result and the error code was 1

おすすめ記事