堅牢なスクリプトにする
事故を防ぐ定番の作法がある。冒頭に set -euo pipefail を置くと、エラー・未定義変数・パイプ途中の失敗で即停止する。trap で終了時の後片付け(一時ファイル削除など)も仕込める。
手元で動いたスクリプトが、本番で静かに壊れる——多くは「途中で失敗したのに、そのまま先へ進んでしまった」ことが原因だ。数行の作法で、この事故はかなり防げる。
🧯 冒頭の安全装置
冒頭に set -euo pipefail を置く。-e はエラーで即停止、-u は未定義変数をエラー扱い、pipefail はパイプの途中の失敗も見逃さない。黙って通り過ぎることを許さなくなる。
💡
ポイント「動いているように見えて実は失敗」を、実行の最初の一歩で止められる。新しく書くスクリプトはこの1行から始めるとよい。
🧹 trap で後片付け
一時ファイルを作る処理では、途中で失敗しても消し残さないよう trap を使う。trap で EXIT を捕まえれば、正常終了でも異常終了でも必ず後片付けが走る。
▶
例tmp=$(mktemp); trap 'rm -f "$tmp"' EXIT — これ以降どこで終わっても $tmp は消える。
🔎 動きを覗く
うまく動かないときは bash -x script.sh で実行すると、各行が展開後の姿で表示される。どの変数が何に化けたか、どこで止まったかが一目で分かる。
⚠
つまずきset -e は万能ではない。条件式の中や || でつないだ箇所では止まらないことがある。過信せず、要所は $? や if で明示的に確認する。
✓
コツ引数チェック([ $# -lt 1 ] && { echo 使い方…; exit 1; })を先頭に足すと、使い方ミスを早い段階で弾ける。
この項目に出てくる用語
set -e / set -u / pipefailせっといー
スクリプトの安全装置。エラーや未定義変数、パイプ途中の失敗で即座に停止させる。
trapとらっぷ
シグナルや終了イベントに応じてコマンドを実行する仕組み。後片付けに使う。