Ich denke, Sie müssen eine temporäre Datei für diesen Vorgang verwenden, damit Sie die verwenden können &&
Operator verwenden können, um den E-Mail-Befehl nur auszuführen, wenn das grep einen Beendigungsstatus zurückgegeben hat, der besagt, dass Übereinstimmungen wie diese vorliegen:
TMPFILE=`mktemp /tmp/mailqgrep.XXXXXX`; mailq | egrep 'rejected|refused' -A5 -B5 > "$TMPFILE" && mail -s 'dd' email@email < "$TMPFILE"; rm "$TMPFILE"
Wenn es Ihnen nichts ausmacht, wenn die temporäre Datei irgendwo bleibt und Sie einen statischen Namen dafür verwenden können, können Sie das spezielle Benennungs- und Lösch-Zeug überspringen:
mailq | egrep 'rejected|refused' -A5 -B5 > /tmp/mailqgrep && mail -s 'dd' email@email < /tmp/mailqgrep
Bearbeiten: Nachdem ich Glenns Antwort gesehen hatte, spielte ich noch ein bisschen damit und anscheinend gab die Zuweisung einer Variablen mithilfe der $()
Syntax den Exit-Code des Befehls zurück, sodass Sie den Test, den er für die String-Länge verwendet hat, überspringen und stattdessen verwenden können. Hier ist alles in einem Befehl:
data=$(mailq | egrep 'rejected|refused' -A 5 -B 5) && mail -s 'dd' email@email <<< "$data"
Edit 2: Nachdem ich Simons Antwort gesehen hatte, habe ich mein mail
Programm ausgecheckt. Es verhält sich nicht so, wie er es standardmäßig beschreibt, hat aber eine Option dafür. Von der Manpage:
-E
Wenn eine ausgehende Nachricht im ersten oder einzigen Nachrichtenteil keinen Text enthält, senden Sie sie nicht, sondern verwerfen Sie sie unbeaufsichtigt. Dadurch wird die Variable "skipemptybody" beim Programmstart wirksam gesetzt. Dies ist nützlich, um Nachrichten von Skripten zu senden, die von cron (8) gestartet wurden.
Möglich machen:
mailq | egrep 'rejected|refused' -A 5 -B 5 | mail -E -s 'dd' email@email