パイプラインの最初のコマンドにエラーがあるかどうかをどうやって確認できますか?

パイプラインの最初のコマンドにエラーがあるかどうかをどうやって確認できますか?

端末で次のコマンドを実行するとします。

this-command-doesnt-exist-and-closes-with-code-127 | jq ''

実行したら、パイプの最初のコマンドの終了コードを知りたいですecho $?。私は次のようにstderrをリダイレクトすることを検討しました。0jq

this-command-doesnt-exist-and-closes-with-1 2>&1 | jq ''
if [ $? != 0 ]; then
    echo "I got an error"
fi

そう意味のないメッセージを送りましたjq。問題は解決されますが、正しい解決策ではないようです。パイプからコマンドのエラーコードをどのように取得できますか?

ベストアンサー1

使用している場合は、次のものをbash使用できますset -o pipefail

$ set -o pipefail
$ this-command-doesnt-exist-and-closes-with-code-127 | jq ''
bash: this-command-doesnt-exist-and-closes-with-code-127: command not found...
$ echo $?
127

~からバッシュのマニュアルページ:

パイプ故障

設定されている場合、パイプラインの戻り値は、ゼロ以外の状態で終了した最後の(最も右側の)コマンドの値、またはパイプラインのすべてのコマンドが正常に終了した場合は0です。このオプションはデフォルトで無効になっています。

おすすめ記事