
シェルスクリプトを書くときに、set -eをつけることで、スクリプトの中で実行されたコマンドのリターンコードが0以外の場合はそこで終了させることができる。
なので、基本的にそこそこ長い処理を書くときには、意図せぬ処理を実行させなくしたり、エラーハンドリングを適切にやりたいときにはつけるのが定跡だと思っています。
grepコマンドや参照コマンドの実行結果でオブジェクトのあるなしを判定するときとかにはコマンドのリターンコードでエラーハンドリングするのがシンプルだけれど、そのコマンド実行時点でシェルスクリプトが止まってしまうことになる。
これを避ける方法を書きます。
まず、set -eをつけずに、コマンドのリターンコードでエラーハンドリングする場合
-eオプションを付けても、強制終了しない書き方。
grep結果が偽であっても、echoコマンドまでちゃんと実行される。
ifの中でコマンド実行することで、-eの範囲の外になるみたい。
別の方法として、一時的に+eとすることで回避することもできる。
参考