Shell 脚本在邮件命令上挂起

Shell 脚本在邮件命令上挂起

我发现对邮件命令的调用导致脚本挂起而没有错误。要关闭脚本,我必须按 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

这两者都应该可以解决问题。

相关内容