
次のbashパイプラインは1を返します。
$ false | true
$ echo $?
1
ただし、スクリプトで実行すると 0 が返されます。
$ cat test.sh
#!/usr/bin/env bash
false | true
echo $?
$ bash test.sh
0
誰かが理由を説明できますか?
答え1
Bashの標準的な動作は、スクリプトに示されているように、パイプラインの最後のコマンドの終了ステータスを返すことです。有効になったようです。パイプ故障対話型シェルのオプションは、最後のコマンドがゼロ以外の終了状態で返されるように強制します。仕組みは次のとおりです。
$ set -o pipefail # enable pipefail
$ false | true
$ echo $?
1
$ set +o pipefail # disable pipefail
$ false | true
$ echo $?
0