シェルスクリプトを書いていると、エラー処理を書くのが面倒で、とりあえずbashをeオプションで起動しておけばいいや程度に思っていたりします。シェルスクリプト中のどこかでエラーが出ればスクリプト自体を終了してくれるので何かと便利なんですが、途中無視できる程度のエラー処理で止まって困ることもあるので、そこを何とか無視する方法を調べました。まーmanに書いてあったんでちょっと読めば気付くんでしょうが自分は結構時間かかりました。
-e 単純なコマンド (前述の シェルの文法セクションを参照) が 0 でないステータスで終了した場合、即座に終了します。ただし 失敗したコマンドが until または while ループの一部である、 if 文の一部である、 && または ││ リストの一部である、コマンドの返り値が ! で反転されている、のいずれかの場合にはシェルは終了しません。
上の条件に当てはめてしまえばいいだけです。
サンプルとして、以下のようなスクリプト。
1 2 3 4 5 6 7 8 9 |
#!/bin/bash -e echo "最初のecho" /bin/false || echo エラーでも続行 echo "多分ここで終わる" /bin/false echo "これは出ないはず" |
最初のfalseでは、止まらず次のfalseで止まって、最後のechoは処理されないはずです。