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

這兩者都應該可以解決問題。

相關內容