シェルの-eオプションとrc.localについて
スクリプトを/etc/rc.local
に書いた場合とそうでない場合で-e
オプションの振舞いが異なるように見えるのですが, なぜでしょうか.
例えば次のようなスクリプトを用意し, caller.sh
を実行すると, echo-sleep5.sh
のプロセスは数秒で消えてしまいます.
(/bin/sh
の実体はdash
, no_such_command
は存在しないもので, ここで失敗することを意図)
caller.sh
#! /bin/sh -e
/path/to/echo-sleep5.sh | no_such_command &
echo-sleep5.sh
#! /bin/bash
# set -e
i=0
while [ true ]; do
sleep 5
echo "$i"
i=$(($i+1))
done
しかしcaller.sh
の内容を/etc/rc.local
に書く場合だと(シバンも同じ), echo-sleep5.sh
内でset -e
しないと, プロセスが残り続けてしまいます.
どういう原理でこういう違いがでるのでしょうか?
追記
環境はRaspbian Jessieです. systemd
のrc-local.service
経由で起動しています.