web-dev-qa-db-ja.com

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

メールコマンドの呼び出しが原因で、スクリプトがエラーなしで一時停止していることがわかりました。スクリプトを閉じるには、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。

件名とメールの引用符を使ってみましたが、もう一度使わなかった。どちらの方法でも同じ結果が得られます。

何が悪いのですか?

4
a coder

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

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

13
Arcege