一連のコマンドを呼び出すスクリプトがあります。その中には、stdoutにノイズが多いもの、stderrにノイズが多いもの、両方にあるものがあります。スクリプトをcronで実行するつもりなので、ノイズが多く、エラー状態の場合にのみ毎日メールで送信する必要はありません。私もです:
be_quiet() {
# save stderr in FD 3
exec 3>&2
exec &> /dev/null
}
die() {
# restore stderr
exec 2>&3
echo $* > /dev/stderr
exit 1
}
次に、すなわち
be_quiet
mkdir -p $CLIENT_ROOT || die "Could not create client root."
cd $CLIENT_ROOT || die "Could not cd to client root."
エラーが発生した場合は具体的で意味のあるメッセージを受け取り、それ以外の場合は何も受け取らないようにすることを目的としています。しかし、私が今見ているのはただ
line 48: /dev/stderr: Permission denied
コマンドラインから実行すると、これは機能します。cron経由で実行すると、アクセス許可が拒否されたというメッセージが表示されます。理由はわかりません。