我發現對郵件命令的呼叫導致腳本掛起而沒有錯誤。要關閉腳本,我必須按 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
這兩者都應該可以解決問題。