シェルスクリプトの set -eu

シェルスクリプトのグッドプラクティスとして知られている -eu のフラグ。

シェルスクリプトを書くときはset -euしておく - Qiita

#!/bin/bash -eu

# ここにシェルスクリプト書く

以下はmanより引用。

-e Exit immediately if a pipeline (which may consist of a single simple command), a list, or a compound command (see SHELL GRAMMAR above), exits with a non-zero status.

-u Treat unset variables and parameters other than the special parameters “@” and “*” as an error when performing parameter expansion. If expan- sion is attempted on an unset variable or parameter, the shell prints an error message, and, if not interactive, exits with a non-zero sta- tus.

ただ下記のケースでは、-e は邪魔になることがあるので使う場合は注意。

-ecommand1 || command2 みたいなことが出来なくなるの使うことないな。-uは付けといて良いが。

-e を一時的に無効化する

-e を途中で無効化するというアプローチもあり。

返り値のチェックでシェルスクリプトが止まらないようにする - CUBE SUGAR CONTAINER

#!/usr/bin/env bash

set +e  # 一時的に機能を無効化する
bash -c "exit 1"  # 返り値が非ゼロになるコマンドを実行する
set -e  # コマンドの実行が終わったら再び有効化する

もしくは下記のように || true を使うこともできる。

# 一連のコマンドとして返り値が必ずゼロになる
bash -c "exit 1" || true

SREの理念と原則

SRE の話。基調講演の山口さんのお話がとても良かった。