tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

シェルスクリプトやbashでset -eしたまま処理を中断せずに続けるメモ

はじめに

シェルスクリプトで意図せずエラー時に処理を中断させたい場合にset -eを使います。

set -eしつつ、意図したエラーであれば処理を先に進めたい場合のメモです。

アジェンダ

  • どうやるか
  • 具体例
  • 使い所

どうやるか

&& true を使います。

いくつか方法はあるのですが、自分的にはこれだけ使ってます。

具体例

サンプル

以下のようなシェルスクリプトサンプルで説明します。

  • stop.sh
$ cat stop.sh
#!/bin/bash

set -e

echo "hoge" # あってる
ehco "fuga" # echoをスペルミス
echo "piyo" # あってる
  • そのまま実行した場合
$ ./stop.sh
hoge
./stop.sh: line 4: ehco: command not found

piyoが出力されずに処理が中断されます。

&& trueを使う

  • stop.shを以下のように変更します
$ cat stop.sh
#!/bin/bash

set -e

echo "hoge" && true
ehco "fuga" && true
echo "piyo" && true
  • 実行
$ ./stop.sh
hoge
./stop.sh: line 6: ehco: command not found
piyo

piyoまで出力されました。

おわり

ちょいスクリプトにこそエラーハンドリングがっつり書くよりはset -eですませたい。
でもここで処理は中断したくない!ってことはまぁまぁあります。
横着しすぎ説\(^o^)/