如何将输出发送到屏幕和邮件?

sam*_*mmy 9 io-redirection email output

我使用以下内容在脚本末尾发送电子邮件。

echo "Script finished on `date`" | /usr/bin/Mail -s "Script complete" "myaccount@myserver.com".
Run Code Online (Sandbox Code Playgroud)

但是,我也想在屏幕上回显相同的消息。我如何在同一个语句中做到这一点?

der*_*ert 19

最简单的方法可能是tee将消息发送到 stderr 以及 stdout:

echo "Script finished on date" | tee /dev/stderr \
    | /usr/bin/Mail -s "Script complete" "myaccount@myserver.com"
Run Code Online (Sandbox Code Playgroud)

tee将其输入复制到多个目的地,包括标准输出。默认情况下,stderr 和 stdout 都进入屏幕;您将 stdout 重定向到Mail,只留下 stderr 进入屏幕。

如果出于某种原因在标准输出中需要它,您可以使用子外壳(或其他几种方式)将其重定向回:

(
    echo "Script finished on date" | tee /dev/stderr \
        | /usr/bin/Mail -s "Script complete" "myaccount@myserver.com"
) 2>&1
Run Code Online (Sandbox Code Playgroud)

  • 或者,将文件发送到文件,然后邮寄文件...如果输出很大并且您想发送它,例如,作为 base64 编码的 gzipped MIME 附件,则非常有用。或者只是将所有输出重定向到一个文件(例如,使用`exec &> $LOGFILE`)然后恢复标准输出,将文件转换为标准输出并邮寄它。 (3认同)