忙しい人のためのまとめ
で指定するシェルスクリプトには
#!/bin/bash -xe
か
#!/bin/sh -xe
つけるべき
経緯
Jenkins周りで調べることがあってたまたま下記のエントリを発見
シェルの途中でこけても処理が続行されるため
run() { command=$1 echo "$command" eval $command # if error code returned, exit this script with error code RET=$? if [ $RET -ne 0 ]; then exit $RET fi }
のようなラッパ経由でコマンド実行してたのですがそれが不要だったという俺的衝撃事実!!! *1
検証
test1.sh(-xe つけてないスクリプト)
#!/bin/bash ls unknown_path echo "finish"
$ ./test1.sh ls: unknown_path: No such file or directory finish $ echo $? 0
途中でエラー起こっても処理が続行して最後の echo
が成功してるのでステータスコード0が返却
test2.sh(-xeつけたスクリプト)
#!/bin/bash -xe ls unknown_path echo "finish"
$ ./test2.sh + ls unknown_path ls: unknown_path: No such file or directory $ echo $? 1
エラーが起きたらそこで中断されてステータスコードも非0が返却