我发现对邮件命令的调用导致脚本挂起而没有错误。要关闭脚本,我必须按 ctrl-c 或对进程 ID 发出终止命令。
脚本的相关部分如下:
EMAIL_TO="[email protected]"
if [ -f /www/archives/pdf/pdf_201207021048.tar ]; then
echo "file exists"
else
echo "file does not exist"
fi
echo "sending mail next..."
mail -s "pdfbackup" "$EMAIL_TO"
echo "mail sent?"
运行此程序时,我看到文本“接下来发送邮件...”,仅此而已。它永远不会返回提示。
我可以使用 ps -ax | 看到该脚本仍在内存中grep myscript.sh。
我尝试过在主题和电子邮件中使用引号,然后再次不使用引号。无论哪种方式都会产生相同的结果。
我究竟做错了什么?
答案1
程序mail
期望用户在其标准输入上键入消息(以 EOF ( Ctrl-D) 终止)。您没有重定向标准输入,程序正在等待输入。您可以从/dev/null
(对于空消息)、固定文件或管道进行重定向,例如:
echo Hi, just sending you a message | mail -s "pdfbackup" "$EMAIL_TO"
或者
mail -s "pdfbackup" "$EMAIL_TO" < /dev/null
这两者都应该可以解决问题。