我有一个调用一堆命令的脚本,其中一些对标准输出有噪音,一些对标准错误,一些对两者都有。我打算让脚本由 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 运行时,它会给出权限被拒绝消息。我不清楚为什么。