Saya pikir Anda harus menggunakan file temp untuk operasi ini sehingga Anda dapat menggunakan &&
operator untuk hanya menjalankan perintah mail jika grep mengembalikan status keluar yang mengatakan itu cocok dengan ini:
TMPFILE=`mktemp /tmp/mailqgrep.XXXXXX`; mailq | egrep 'rejected|refused' -A5 -B5 > "$TMPFILE" && mail -s 'dd' email@email < "$TMPFILE"; rm "$TMPFILE"
Jika Anda tidak keberatan file temp menempel di suatu tempat dan dapat menggunakan nama statis untuk itu, Anda bisa melewatkan hal-hal penamaan dan penghapusan khusus:
mailq | egrep 'rejected|refused' -A5 -B5 > /tmp/mailqgrep && mail -s 'dd' email@email < /tmp/mailqgrep
Sunting: Setelah melihat jawaban glenn saya bermain dengan ini lagi dan tampaknya menetapkan variabel menggunakan $()
sintaks mengembalikan kode keluar dari perintah, sehingga Anda dapat melewati tes yang digunakannya untuk panjang string dan menggunakannya sebagai gantinya. Ini dia semua dalam satu perintah:
data=$(mailq | egrep 'rejected|refused' -A 5 -B 5) && mail -s 'dd' email@email <<< "$data"
Sunting 2: Setelah melihat jawaban Simon, saya memeriksa mail
program saya . Itu tidak berperilaku seperti yang ia gambarkan secara default, tetapi memang memiliki opsi untuk itu. Dari halaman manual:
-E
Jika pesan keluar tidak mengandung teks apa pun di bagian pesan pertama atau hanya pesannya, jangan kirimkan tetapi buanglah dengan diam-diam, secara efektif mengatur variabel variabel pada saat startup program. Ini berguna untuk mengirim pesan dari skrip yang dimulai oleh cron (8).
Memungkinkan ini:
mailq | egrep 'rejected|refused' -A 5 -B 5 | mail -E -s 'dd' email@email