ESM アジャイル事業部 開発者ブログ

永和システムマネジメント アジャイル事業部の開発者ブログです。

`set -e` で、コマンドが失敗したときシェルスクリプトの実行を中断する

シェルスクリプトで途中のコマンドが失敗したら直ちに実行を中断してほしいことがあります。 事前に set -e しておけば、コマンドが失敗したとき (non-zero で終了したとき) にスクリプト自体が異常終了します。

#!/bin/sh

set -e

false     # ここで中断される

echo ':(' # 実行されては困る処理

sh や bash-e を同じように解釈するので、#!/bin/sh -e というように shebang に書くこともできます。 反対に set -o errexit というやや冗長な書き方もあります。

次のような箇所では、コマンドが non-zero を返してもスクリプトは終了しません。

  • パイプラインの途中 (最後のコマンドは除く)。
  • whileuntil if elif の条件式。
  • 複数の式を expr1 && expr2 のように AND や OR でつないだ式。

bash の pipefail オプションを使えばパイプラインで失敗したときにも終了できます。

#!/bin/bash -eo pipefail

false | true # ここで中断される

echo ':('    # 実行されては困る処理

ブログはじめました

永和システムマネジメント アジャイル事業部でも、最近流行り(?)の技術ブログをゆるくはじめることにしました。 弊社メンバーによる、気合の入った熱い記事や、脱力系のゆるい記事、はたまた日々の仕事で学んだ TIL などを自分たちのペースで皆さんに伝えられればと思います。

わたしたちに会った時の話のネタにするなどしていただければ、幸いです。

では、よろしくお願いいたします。