株式会社ヴァンデミックシステム

Blog

<スポンサーリンク>

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

まず、set -eをつけずに、コマンドのリターンコードでエラーハンドリングする場合

-eオプションを付けても、強制終了しない書き方。
grep結果が偽であっても、echoコマンドまでちゃんと実行される。
ifの中でコマンド実行することで、-eの範囲の外になるみたい。

別の方法として、一時的に+eとすることで回避することもできる。

参考

シェルスクリプトでset -eしているときに処理を中断せずエラーを扱う方法

<スポンサーリンク>

コメントを残す

Allowed tags:  you may use these HTML tags and attributes: <a href="">, <strong>, <em>, <h1>, <h2>, <h3>
Please note:  all comments go through moderation.

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)