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

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

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

echo "Script finished on `date`" | /usr/bin/Mail -s "Script complete" "[email protected]".

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

答案1

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

echo "Script finished on date" | tee /dev/stderr \
    | /usr/bin/Mail -s "Script complete" "[email protected]"

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

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

(
    echo "Script finished on date" | tee /dev/stderr \
        | /usr/bin/Mail -s "Script complete" "[email protected]"
) 2>&1

相关内容