Shell-Skript bleibt beim Mail-Befehl hängen

Shell-Skript bleibt beim Mail-Befehl hängen

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 mailProgramm 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.

verwandte Informationen