मुझे लगता है कि आपको इस ऑपरेशन के लिए एक अस्थायी फ़ाइल का उपयोग करना होगा ताकि आप &&
ऑपरेटर को केवल मेल कमांड चलाने के लिए उपयोग कर सकें यदि grep एक निकास स्थिति लौटाता है जो कहता है कि यह इस तरह से मेल खाता था:
TMPFILE=`mktemp /tmp/mailqgrep.XXXXXX`; mailq | egrep 'rejected|refused' -A5 -B5 > "$TMPFILE" && mail -s 'dd' email@email < "$TMPFILE"; rm "$TMPFILE"
यदि आपने टेम्प फ़ाइल को कहीं से चिपका हुआ नहीं देखा है और इसके लिए एक स्थिर नाम का उपयोग कर सकते हैं, तो आप विशेष नामकरण और विलोपन मूल्य को छोड़ सकते हैं:
mailq | egrep 'rejected|refused' -A5 -B5 > /tmp/mailqgrep && mail -s 'dd' email@email < /tmp/mailqgrep
संपादित करें: ग्लेन के जवाब को देखने के बाद मैंने इसके साथ कुछ और खेला और स्पष्ट रूप से $()
वाक्यविन्यास का उपयोग करके एक चर असाइन करना कमांड के निकास कोड को वापस करता है, इसलिए आप उस स्ट्रिंग की लंबाई के लिए उपयोग किए गए परीक्षण को छोड़ सकते हैं और इसके बजाय उसका उपयोग कर सकते हैं। यहाँ यह सब एक आदेश में है:
data=$(mailq | egrep 'rejected|refused' -A 5 -B 5) && mail -s 'dd' email@email <<< "$data"
संपादन 2: साइमन का उत्तर देखने के बाद मैंने अपना mail
कार्यक्रम देखा। यह उस तरीके से व्यवहार नहीं करता है जो वह डिफ़ॉल्ट रूप से वर्णन करता है, लेकिन उसके लिए एक विकल्प है। आदमी पृष्ठ से:
-E
यदि एक आउटगोइंग संदेश में उसके पहले या एकमात्र संदेश भाग में कोई पाठ नहीं है, तो उसे भेजें नहीं, लेकिन चुपचाप छोड़ दें, प्रभावी ढंग से प्रोग्राम स्टार्टअप पर Skipemptybody चर सेट कर रहा है। यह क्रोन (8) द्वारा शुरू की गई लिपियों से संदेश भेजने के लिए उपयोगी है।
इसे संभव बनाना:
mailq | egrep 'rejected|refused' -A 5 -B 5 | mail -E -s 'dd' email@email