シェルの-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経由で起動しています.