Ich stelle fest, dass ein Aufruf des Mail-Befehls dazu führt, dass ein Skript ohne Fehler angehalten wird. Um das Skript zu schließen, muss ich Strg-C drücken oder einen Kill-Befehl für die Prozess-ID ausführen.
Der relevante Abschnitt des Skripts ist unten:
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?"
Wenn ich dies ausführe, wird mir nur der Text „Als Nächstes wird E-Mail gesendet …“ angezeigt, sonst nichts. Die Eingabeaufforderung wird nie wieder angezeigt.
Mit ps -ax | grep myscript.sh kann ich sehen, dass das Skript noch im Speicher ist.
Ich habe versucht, den Betreff und die E-Mail in Anführungszeichen zu setzen, und auch wieder ohne. In beiden Fällen ist das Ergebnis dasselbe.
Was mache ich falsch?
Antwort1
Das mail
Programm erwartet, dass der Benutzer die Nachricht auf seiner Standardeingabe eingibt (beendet durch EOF ( Ctrl-D)). Sie leiten stdin nicht um, das Programm wartet auf Eingabe. Sie können entweder von /dev/null
(für eine leere Nachricht), von einer vorgefertigten Datei oder von einer Pipe umleiten, zum Beispiel:
echo Hi, just sending you a message | mail -s "pdfbackup" "$EMAIL_TO"
oder
mail -s "pdfbackup" "$EMAIL_TO" < /dev/null
Beides sollte das Problem beheben.