メールコマンドでシェルスクリプトが中断されます。

メールコマンドでシェルスクリプトが中断されます。

私は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ユーザーが標準入力(Ctrl-DEOF()で終わる)にメッセージを入力すると予想します。標準入力をリダイレクトせずにプログラムが入力を待っています。/dev/null空のメッセージの場合は、固定ファイルまたはパイプからリダイレクトできます。たとえば、次のようになります。

echo Hi, just sending you a message | mail -s "pdfbackup" "$EMAIL_TO"

または

mail -s "pdfbackup" "$EMAIL_TO" < /dev/null

どちらもトリックを実行する必要があります。

おすすめ記事