GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Shell-Skript hängt am Mail-Befehl?

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.


Linux
  1. Wie übergibt man ein Befehlszeilenargument an ein Shell-Skript?

  2. Unerwartetes Verhalten eines Shell-Skripts?

  3. Shell-Skript mit Funktion und Parameter als Variablen?

  4. Ist es möglich, ein Bash-Shell-Skript mit einem anderen Befehlszeilenprogramm interagieren zu lassen?

  5. Bearbeiten Sie das Shell-Skript, während es ausgeführt wird

Einfaches Verständnis von Shell-Befehlen mit dem Skript „Explain Shell“ in Linux

So führen Sie einen Linux-Shell-Befehl / ein Skript im Hintergrund aus

So speichern Sie einen Linux-Befehl als Variable im Shell-Skript

Kommando-Shell

Wie führe ich einen Befehl in einem Shell-Skript aus?

Farbige Shell-Script-Ausgabebibliothek