2011-12-23 9 views
6

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

cmd 

<(cmd) 

के रूप में लपेटा जाता है इस तरीके से एक कमांड लपेटकर, उदाहरण में रखकर नीचे मैं यह निर्धारित है कि वहाँ है कि मैं चला रहा हूँ दो आदेशों के बीच एक अंतर है, और फिर मैं कर रहा हूँ एक सटीक अंतर निर्धारित करने के लिए। < (cmd) नामक कमांड को लपेटने का निर्माण/तकनीक क्या है? धन्यवाद

[[email protected] v6.5 html]$ git status | egrep modified | awk '{print $3}' | wc -l 
51 
[[email protected] v6.5 html]$ git status | egrep modified | awk '{print $3}' | xargs grep -l 'Ext\.define' | wc -l 
50 
[[email protected] v6.5 html]$ diff <(git status | egrep modified | awk '{print $3}') <(git status | egrep modified | awk '{print $3}' | xargs grep -l 'Ext\.define') 
39d38 
< javascript/reports/report_initiator.js 

परिशिष्ट Git के ls-फ़ाइल का उपयोग कर के रूप में इस प्रकार है (untested) होना चाहिए के लिए सलाह का उपयोग कर संशोधित आदेश:

diff <(git ls-files -m) <(git ls-files -m | xargs grep -l 'Ext\.define') 
+5

'गिट स्थिति' का विश्लेषण न करें, 'git ls-files -m' का उपयोग करें! – Mat

+0

गिट टिप के लिए धन्यवाद, एक आकर्षण की तरह काम किया –

+1

इसे घृणित कहा जाता है। ;) –

उत्तर

6
+0

मैं आपके समान होने के बावजूद अन्य उत्तर स्वीकार कर रहा हूं क्योंकि उस उपयोगकर्ता ने मुझे एक उपयोगी गिट टिप भी दी है, आशा है कि आप समझेंगे, मैं सोच रहा था कि मैं दो समान एक साथ उत्तर –

+0

के बीच कैसे चयन करने जा रहा था, ठीक है, मैं ' डी पीटा मैट लगभग 30 सेकंड तक, लेकिन केवल इसलिए कि वह आपकी समस्या से आपकी मदद कर रहा था, न कि आपके प्रश्न के साथ। लगता है कि यह उचित है। – MattH

+0

हां मैं अब देखता हूं आखिर में मेरे पास एक स्क्रीन है जो कहती है कि आपने 14 मिनट पहले उत्तर दिया था, और 13 मिनट पहले –

1

यह प्रक्रिया प्रतिस्थापन है, जैसा कि आपको बताया गया है। मैं बस यह इंगित करना चाहता हूं कि यह दूसरी दिशा में भी काम करता है। प्रक्रिया प्रतिस्थापन> (cmd) आपको एक कमांड लेने की अनुमति देता है जो फ़ाइल को लिखता है और इसके बजाय उस आउटपुट को किसी अन्य कमांड के stdin पर रीडायरेक्ट किया जाता है। यह पाइपलाइन में कुछ डालने के लिए बहुत उपयोगी है जो एक आउटपुट फ़ाइल नाम को तर्क के रूप में लेता है। आप इसे उतना नहीं देखते हैं क्योंकि हर मानक कमांड पहले से ही stdout पर लिखता है, लेकिन मैंने इसे अक्सर कस्टम सामान के साथ उपयोग किया है। यहां एक उत्तीर्ण उदाहरण है:


$ echo "hello world" | tee >(wc) 
hello world 
     1  2  12 
संबंधित मुद्दे