我创建了一个运行 shell 脚本的 cron 作业。我希望 shell 脚本运行并捕获其输出,并在完成后通过电子邮件发送。这是我目前所得到的,但邮件正文是空的。
我已尝试以下所有方法:
/root/myscript.sh | tee output.txt | mail -s "Email subject" [email protected]
/root/myscript.sh | tee output.txt | mail -s "Email subject" [email protected] &> /dev/null
/root/myscript.sh | tee output.txt && mail -s "Email subject" [email protected] < output.txt &> /dev/null
/root/myscript.sh > tee output.txt && mail -s "Email subject" [email protected] < output.txt &> /dev/null
所有这些运行正常,但它们会生成一封正文为空的电子邮件。运行脚本确实会在 stdout 上产生输出。
答案1
重定向时丢失屏幕文本的最可能原因是输出被发送到标准错误设备。output.txt
运行命令后,如果为空,则可以确认这一点。
要重定向标准错误以及标准输出,您需要添加2>&1
到命令中,如下所示:
/root/myscript.sh 2>&1 | tee output.txt | mail -s "Email subject" [email protected]
然后您应该会在中看到所有脚本的输出output.txt
。