通常、Bash の処理は エラーが発生しても次のステップへと 進んで行きます。
[test1.sh]
true
echo 1=$?
false
echo 2=$?
true
echo 3=$?
false
echo 4=$?
$ bash test1.sh
1=0
2=1
3=0
4=1
エラーが発生したときに止めるには オプション "-e" を付けます。
$ bash -e test1.sh 1=0
また、パイプしている場合 最後のコマンドの結果が返ります。
[test2.sh]
true | true
echo 1=$?
true | false | true
echo 2=$?
false | true
echo 3=$?
true | false
echo 4=$?
$ bash test2.sh
1=0
2=0
3=0
4=1
これにオプション "-e" を付けて実行しても
$ bash -e test1.sh 1=0 2=0 3=0
最後のコマンドで発生しているエラーしか 反応してくれません。
このようなときは さらに オプション "-o pipefail" を指定します。
$ bash -e -o pipefail test1.sh 1=0
これでパイプ中のエラーが返るようになります。