mail コマンドの呼び出しにより、スクリプトがエラーなしで一時停止していることがわかりました。スクリプトを閉じるには、Ctrl + C を押すか、プロセス ID で kill コマンドを発行する必要があります。
スクリプトの関連セクションは次のとおりです。
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。stdin をリダイレクトしていないため、プログラムは入力を待機しています。リダイレクトは、(空のメッセージの場合)、既成ファイル、またはパイプから行うことができます/dev/null
。例:
echo Hi, just sending you a message | mail -s "pdfbackup" "$EMAIL_TO"
または
mail -s "pdfbackup" "$EMAIL_TO" < /dev/null
これら両方で問題は解決するはずです。