こういうシェルスクリプトがあるとする.
-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するほうが安心.