de[v|b]log

ShellScript, Coffee, iOS/OSX Dev
Origin: Himajinworks.
About.

ちょっと質問いただいて、自分もよくわからなかったので質問したり、やってみたりしたまとめです。

内容

内容ですが、シェルスクリプトにおいてコマンド実行時に終了状態が0以外である場合に実行を停止するというものです。

1
2
3
4
set -e

any_cmd
echo $?

any_cmdの終了状態が0以外の場合停止するというやつです。

Twitterでは

これに関して

ということで、どうなのか不明瞭だったのでまずシェル芸能界に質問したところ、@satoh_fumiyasuさんが

とおっしゃっておりました。かなり広く検証されていて、かつバージョン依存での怪しい挙動の話もされているので、流れを追うとよさそうです。

個人的にもやってみて

私の方も個人的に検証をしようということでいくらかやってみました。

個人での結果

検証結果としては以下を見ていただければと思うのですが、シェル関数外でset -eした場合でも、シェル関数内で終了コード0以外が出た場合終了していることがわかりました。

先ほどのURLの先にある@satoh_fumiyasuさんのTweetのように、

$- はグローバルなので継承されるはず。

というので結論ということで大丈夫かと思います。

そうでない場合は… シェル依存の挙動 or バグではないかということが予想されます。

検証材料と結果

順はおかしくなりますが、最後に検証に使ったコード及び結果が以下になります。動作させる場合は個人の責任でおねがいします。