私は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
どちらもトリックを実行する必要があります。