hitode909の日記

趣味はマリンスポーツですの日記です

bash -eより set -e

こういうシェルスクリプトがあるとする.
-eしてるので,途中でエラーが出たときには止まってほしい.

#!/bin/bash -e

echo 1
ehco 2
echo 3


止まってくれ……!!

% ./a.sh
1
./a.sh: line 4: ehco: command not found

ちゃんと止まった.
ところで,bash ./a.shとか,cat a.sh | bashとかして実行してみると,3まで実行されてしまう!!!.

% bash ./a.sh
1
./a.sh: line 4: ehco: command not found
3
% cat ./a.sh | bash
1
bash: line 4: ehco: command not found
3


こういったことがあってはつらいので,bash -eじゃなくて,set -eしましょう.

#!/bin/bash

set -e

echo 1
ehco 2
echo 3


平和.

% bash ./a.sh
1
./a.sh: line 6: ehco: command not found


わざわざcatしてbashする人いないだろう,という感じだけど,curlで取ってきてbashに流すとか,別のブランチのスクリプトをcat-fileして実行したいことはある.
そういったときに,対象のスクリプトが-eなのか,-xeなのか,-uなのか,実行する側からは分からないので,スクリプトの内部で責任を持ってsetするほうが安心.