2009-08-19 15 views
11

superuser.com पर a post's जवाब में, हम देखते हैं किबैश में <() क्या करता है?

join <(sort abc) <(sort bcd) 

उन्हें शामिल होने के लिए भेजने से पहले फ़ाइलों एबीसी और बीसीडी सॉर्ट होगा। यह एक प्रोग्रामिंग सवाल की ओर जाता है, जो स्टैक ओवरफ्लो के लिए उपयुक्त है।

यह कैसे काम करता है? यह <() निर्माण क्या है? इसे क्या कहते हैं?

यदि (सॉर्ट एबीसी) एक कानूनी कॉल है जो एबीसी और रिटर्न आउटपुट पर सॉर्ट करता है, तो हमें < क्यों चाहिए?

है, निम्नांकित दो पंक्तियों को बराबर

(sort abc) | join - <(sort bcd) 
join <(sort abc) <(sort bcd) 

लेकिन

join (sort abc) (sort bcd) 

एक सिंटैक्स त्रुटि है। कृपया मुझे सुराग करो!

+1

शैल के लिए ठीक मैनुअल पढ़ने की अच्छी पुरानी परंपरा का क्या बन गया है? – Jens

उत्तर

21

इसे प्रक्रिया प्रतिस्थापन कहा जाता है।

<(list) एक भी वाक्य रचना निर्माण, '<' चरित्र इस मामले में एक अलग प्रतीक नहीं है। यह सूची निष्पादित करता है और आदेश के लिए एक फ़ाइल (मानक पुनर्निर्देशन नहीं) के रूप में अपना आउटपुट प्रदान करता है।

यह चल रहा है के बराबर है (यह सिवाय बजाय अस्थायी फ़ाइलों को जब संभव के पाइप का उपयोग करता है):

sort abc > /tmp/1 
sort bcd > /tmp/2 
join /tmp/1 /tmp/2 

ध्यान दें कि दोनों प्रकार के उत्पादन में मानक के रूप में नहीं पुनर्निर्देशन के रूप में फ़ाइल नाम शामिल होने के लिए प्रदान की जाती हैं,।

(list) एक अलग निर्माण, एक अलग उद्देश्य के लिए है। यह बस एक सबहेल बनाता है जो सूची निष्पादित करता है, जो मूल मानक के लिए अपने मानक वर्णनकर्ता प्रदान करता है।

Here बैश मैनुअल में प्रासंगिक हिस्सा है।

5

<(command) एक प्रक्रिया प्रतिस्थापन (man bash में अनुसार अनुभाग देखें) है। मूल रूप से आदेश चलाया जाता है और इसके उत्पादन, पाइप के नाम से एक नामित पाइप (फीफो) को खिलाया, और पूरे निर्माण तो बदल दिया जाता है इस प्रकार join /dev/fd/x /dev/fd/y हो जाती है।

संबंधित मुद्दे