Grep / dev / null के आउटपुट को रीडायरेक्ट करने में क्या बात है?


24

इस पंक्ति पर विचार करें:

${libdir}/bin/licenseTool check "${SERIAL}" "${VERSION}" "${PRODUCT}" ${libdir} | grep '^200' >/dev/null

उत्पादन में पैटर्न की तलाश में है, तो के परिणाम का फ़ायदा क्या है कि फेंक दी जाती है?

और, यदि एक पंक्ति की तरह जो बैश स्क्रिप्ट में अंतिम चीज़ के रूप में दिखाई देती है, तो क्या इसका एक्ज़िट वैल्यू स्क्रिप्ट के कॉलर पर वापस आ गया है, या अनदेखा कर दिया गया है? (मैं यह अनुमान लगा रहा हूं कि क्या हम यह मान सकते हैं कि यह केवल साइड इफेक्ट के लिए किया गया है या किसी तरह कॉलर को कुछ लौटाता है।)

जवाबों:


29

आपका संदेह सही है; स्क्रिप्ट के अंतिम कमांड की निकास स्थिति को कॉलिंग वातावरण में पास किया जाएगा। तो इसका उत्तर यह है कि यह स्क्रिप्ट एग्जिट स्टेटस 0 लौटाएगा यदि grepडेटा में कुछ मिलान किया गया हो, तो स्टेटस 1 मौजूद हो अगर कोई मैच न हो, और एग्जिट स्टेटस 2 अगर कुछ त्रुटि हुई हो।


27

की बात grepहै कि फेंक दी जाती है पिंग उत्पादन कि लेखक केवल की वापसी स्थिति चाहता है grep। वह / वह केवल यह जानना चाहते हैं कि एक पैटर्न का मिलान हुआ या नहीं। आपके मामले में, अंतिम grepजाँच अगर पहले वाले कमांड के आउटपुट में कोई भी रेखाएँ हैं, जो शुरू होती है 200

आधुनिक POSIX सिस्टम में, आप इसे बिना रीडायरेक्ट किए grep -q के साथ कर सकते हैं /dev/null:

... | grep -q '^200'

एक नोट जिसका उपयोग करने grep -qका एक मामूली दुष्प्रभाव है, उसकी टिप्पणी में इंगित करने के लिए स्टीफन चेज़ेलस का धन्यवाद । grep -qपहला मैच पाते ही बाहर निकल जाता है, अगर बाहर निकलने के licenseToolबाद भी कुछ लिखता है grep, तो उसे एक SIGPIPE प्राप्त होगा।


2
और grep -qकम सीपीयू का उपयोग करता है
स्केपरन

5
इन चीजों के चलते, grep -qहाल ही में जोड़ा गया था; > /dev/nullइसके बजाय बहुत सारी लिपियाँ अभी भी उपयोग होती हैं, क्योंकि आप सभी बर्फ युग (यानी 1995) में वापस आ गए थे।
zwol

3
क्या आपके पहले वाक्य में एक क्रिया की कमी है?
AL

GNU मैनपेज से "grep -q" और "grep> / dev / null" के बीच एक और असमानता: "हालांकि, अगर -q या --quiet या --silent का उपयोग किया जाता है और एक रेखा का चयन किया जाता है, तो निकास स्थिति है 0 भले ही कोई त्रुटि हुई हो। "
मार्क

यदि दस्तावेज़ीकरण सही है "निकास स्थिति 0 है तो भी त्रुटि हुई है" ... मुझे लगता है कि -qविकल्प उचित नहीं लगता है ... क्योंकि आप चाहते हैं कि यह निकास स्थिति की जाँच करके त्रुटि के बारे में जानना चाहिए।
ट्रेवर बॉयड स्मिथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.