Bu işlem için geçici bir dosya kullanmak zorunda kalacağınızı düşünüyorum, böylece &&
işleci yalnızca posta komutunu çalıştırmak için kullanabilirsiniz , grep bu gibi eşleşmeleri olduğunu söyleyen bir çıkış durumu döndürdüyse:
TMPFILE=`mktemp /tmp/mailqgrep.XXXXXX`; mailq | egrep 'rejected|refused' -A5 -B5 > "$TMPFILE" && mail -s 'dd' email@email < "$TMPFILE"; rm "$TMPFILE"
Geçici dosyanın bir yere yapıştırılmasının sakıncası yoksa ve bunun için statik bir ad kullanabilirseniz, özel adlandırma ve silme öğelerini atlayabilirsiniz:
mailq | egrep 'rejected|refused' -A5 -B5 > /tmp/mailqgrep && mail -s 'dd' email@email < /tmp/mailqgrep
Düzenleme: Glen'in cevabını gördükten sonra biraz daha oynadım ve görünüşe göre $()
sözdizimini kullanarak bir değişken atama komutun çıkış kodunu döndürür, böylece dize uzunluğu için kullandığı testi atlayabilir ve bunun yerine kullanabilirsiniz. İşte hepsi bir komutta:
data=$(mailq | egrep 'rejected|refused' -A 5 -B 5) && mail -s 'dd' email@email <<< "$data"
Düzen 2: Simon'ın cevabını gördükten sonra mail
programımı kontrol ettim . Varsayılan olarak tanımladığı şekilde davranmaz, ancak bunun için bir seçeneği vardır. Man sayfasından:
-E
Giden bir mesaj ilk veya tek mesaj kısmında herhangi bir metin içermiyorsa, göndermeyin, sessizce atın, program başlangıcında atlamalı kullanıcı değişkenini etkin bir şekilde ayarlayın. Bu, cron (8) tarafından başlatılan komut dosyalarından mesaj göndermek için kullanışlıdır.
Bunu mümkün kılmak:
mailq | egrep 'rejected|refused' -A 5 -B 5 | mail -E -s 'dd' email@email