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 das ausführe, sehe ich den Text „sending mail next…“ und nichts weiter. Es kehrt nie zur Eingabeaufforderung zurück.
Mit ps -ax | kann ich sehen, dass sich das Skript noch im Speicher befindet grep myscript.sh.
Ich habe versucht, den Betreff und die E-Mail in Anführungszeichen zu setzen, und wieder ohne. In beiden Fällen wird das gleiche Ergebnis erzeugt.
Was mache ich falsch?
Akzeptierte Antwort:
Die mail
Das Programm erwartet, dass der Benutzer die Nachricht in seine Standardeingabe eingibt (beendet durch EOF (Strg-D )). Sie leiten stdin nicht um, das Programm wartet auf Eingaben. Sie können entweder von /dev/null
umleiten (für eine leere Nachricht), aus einer vorgefertigten Datei oder aus einer Pipe, 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 lösen.