Shell 脚本挂在邮件命令上

a c*_*der 5 shell shell-script mail-command

我发现调用 mail 命令导致脚本无错误挂起。要关闭脚本,我必须按 ctrl-c 或对进程 ID 发出 kill 命令。

脚本的相关部分如下:

EMAIL_TO="my@email.com"

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?"
Run Code Online (Sandbox Code Playgroud)

运行此程序时,我看到文本“下一个发送邮件...”,仅此而已。它永远不会返回到提示。

我可以看到脚本仍然在内存中 ps -ax | grep myscript.sh。

我试过在主题和电子邮件周围使用引号,但又一次没有。无论哪种方式都会产生相同的结果。

我究竟做错了什么?

Arc*_*ege 15

mail程序期望用户在其标准输入(以 EOF ( Ctrl-D)结尾)上键入消息。您没有重定向标准输入,程序正在等待输入。您可以从/dev/null(对于空消息)、罐头文件或管道重定向,例如:

echo Hi, just sending you a message | mail -s "pdfbackup" "$EMAIL_TO"
Run Code Online (Sandbox Code Playgroud)

或者

mail -s "pdfbackup" "$EMAIL_TO" < /dev/null
Run Code Online (Sandbox Code Playgroud)

这两个都应该解决问题。