我已经看到很多关于仅通过电子邮件发送STDERR的问题,但这并不是我想要的。当STDERR不为空时,我希望将STDOUT和STDERR发送给我,或者,也可以发送日志文件的内容,这将完成同样的事情。我怎么能做到这一点?
答案 0 :(得分:1)
总之,如果STDERR输出不为空,您希望通过电子邮件发送日志文件。在那种情况下:
some_command 2>"$HOME/.errs.tmp.$$"
[ -s "$HOME/.errs.tmp.$$" ] && mail user@host -s "Error Info" <logfile
-s
测试文件是否为非空。因此,只有在出现错误时才会发送电子邮件。
要清理临时文件,请使用:
errs="$HOME/.errs.tmp.$$"
my_exit() { rm -f "$errs"; }
trap my_exit EXIT
some_command 2>"$errs"
[ -s "$errs" ] && mail user@host -s "Error Info" <logfile
请注意,临时文件已放在用户的主目录中。虽然这里可能不重要,但这可以避免与/tmp
中创建的临时文件相关的安全问题,因此需要mktemp
或其他实用程序。