Myślę, że będziesz musiał użyć pliku tymczasowego do tej operacji, abyś mógł użyć &&
operatora do uruchomienia polecenia mail tylko wtedy, gdy grep zwrócił status wyjścia, który mówi, że ma takie dopasowania:
TMPFILE=`mktemp /tmp/mailqgrep.XXXXXX`; mailq | egrep 'rejected|refused' -A5 -B5 > "$TMPFILE" && mail -s 'dd' email@email < "$TMPFILE"; rm "$TMPFILE"
Jeśli nie przeszkadzało ci, że plik tymczasowy gdzieś się zatrzymał i możesz użyć jego statycznej nazwy, możesz pominąć specjalne czynności związane z nazywaniem i usuwaniem:
mailq | egrep 'rejected|refused' -A5 -B5 > /tmp/mailqgrep && mail -s 'dd' email@email < /tmp/mailqgrep
Edycja: Po zobaczeniu odpowiedzi glenna bawiłem się tym trochę i najwyraźniej przypisanie zmiennej przy użyciu $()
składni zwraca kod wyjścia polecenia, więc możesz pominąć test użyty dla długości łańcucha i użyć go zamiast tego. Oto wszystko w jednym poleceniu:
data=$(mailq | egrep 'rejected|refused' -A 5 -B 5) && mail -s 'dd' email@email <<< "$data"
Edycja 2: Po zobaczeniu odpowiedzi Simona sprawdziłem mój mail
program. Nie zachowuje się w sposób opisany domyślnie, ale ma na to opcję. Ze strony podręcznika:
-E
Jeśli wiadomość wychodząca nie zawiera żadnego tekstu w pierwszej lub jedynej części wiadomości, nie wysyłaj jej, ale odrzuć w ciszy, skutecznie ustawiając zmienną skipemptybody przy uruchomieniu programu. Jest to przydatne do wysyłania wiadomości ze skryptów uruchomionych przez cron (8).
Umożliwiając to:
mailq | egrep 'rejected|refused' -A 5 -B 5 | mail -E -s 'dd' email@email