ことのはじまり
シェルスクリプトを書くときに set -e
しますよね
これをしておくとシェルスクリプトの途中でエラーが発生した場合に処理を中断してくれるので、ある処理が失敗したあと、意図せず後続の処理が動いて悲劇が起こるのを防いてくれます
ところが先日、
「set -eしちゃうと、command1 || command2
みたいな書き方が出来なくてアレ」
みたいな記事を目にしたので、そんなことあらへんやろと検証してみました (100%の自信はなかったので、念のためにw)
結論
set -e
していても command1 || command2
みたいな書き方ができる
検証
下記のようなそれっぽいスクリプトを用意して
set -ex echo 'hoge' # ここで中断されずに `echo 'yay'` が実行されて欲しい mkdir /home || echo 'yay' # ここで非ゼロexit codeとなるので、中断されるはず mkdir /tmp # ここまで行くと行き過ぎ echo 'Error! Should not be call this line!' && exit 1
動かすと、、、
$ bash hoge.sh + echo hoge hoge + mkdir /home mkdir: cannot create directory ‘/home’: File exists + echo yay yay + mkdir /tmp mkdir: cannot create directory ‘/tmp’: File exists
最初のmkdirに失敗しても、or実行しているechoに成功しているので 中断されていません もちろん、2度目のmkdirでは普通に非ゼロのexitとなったので中断されました
上記の検証で、 set -eしている状態で前者のor演算が失敗しても処理は中断されない ことがハッキリしたので、set -e
していても臆せず command1 || command2
みたいな書き方ができますね