Je pense que vous devrez utiliser un fichier temporaire pour cette opération afin que vous puissiez utiliser l' &&
opérateur pour exécuter la commande mail uniquement si le grep a renvoyé un état de sortie qui indique qu'il avait des correspondances comme ceci:
TMPFILE=`mktemp /tmp/mailqgrep.XXXXXX`; mailq | egrep 'rejected|refused' -A5 -B5 > "$TMPFILE" && mail -s 'dd' email@email < "$TMPFILE"; rm "$TMPFILE"
Si cela ne vous dérange pas que le fichier temporaire reste quelque part et puisse utiliser un nom statique, vous pouvez ignorer les éléments spéciaux de dénomination et de suppression:
mailq | egrep 'rejected|refused' -A5 -B5 > /tmp/mailqgrep && mail -s 'dd' email@email < /tmp/mailqgrep
Edit: Après avoir vu la réponse de glenn, j'ai encore joué avec cela et apparemment, assigner une variable en utilisant la $()
syntaxe renvoie le code de sortie de la commande, vous pouvez donc ignorer le test qu'il a utilisé pour la longueur de la chaîne et l'utiliser à la place. Ici, tout est dans une seule commande:
data=$(mailq | egrep 'rejected|refused' -A 5 -B 5) && mail -s 'dd' email@email <<< "$data"
Edit 2: Après avoir vu la réponse de Simon, j'ai vérifié mon mail
programme. Il ne se comporte pas de la manière qu'il décrit par défaut, mais a une option pour cela. Depuis la page de manuel:
-E
Si un message sortant ne contient aucun texte dans sa première ou sa seule partie de message, ne l'envoyez pas, mais jetez-le en silence, définissant efficacement la variable skipemptybody au démarrage du programme. Ceci est utile pour envoyer des messages à partir de scripts démarrés par cron (8).
Rendre cela possible:
mailq | egrep 'rejected|refused' -A 5 -B 5 | mail -E -s 'dd' email@email