シェル スクリプトがメール コマンドでハングする

シェル スクリプトがメール コマンドでハングする

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

これら両方で問題は解決するはずです。

関連情報