इसे प्रक्रिया प्रतिस्थापन कहते हैं।
<(list)
वाक्य रचना दोनों के द्वारा समर्थित है, bash
और zsh
। यह एक कमांड ( list
) को किसी अन्य कमांड के आउटपुट को पास करने का एक तरीका प्रदान करता है जब पाइप ( |
) का उपयोग करना संभव नहीं है। उदाहरण के लिए जब कोई कमांड सिर्फ इनपुट का समर्थन नहीं करता है STDIN
या आपको कई कमांड के आउटपुट की आवश्यकता होती है:
diff <(ls dirA) <(ls dirB)
<(list)
सिस्टम द्वारा समर्थित list
होने पर /dev/fd
, एक फ़ाइल के साथ आउटपुट को जोड़ता है, अन्यथा एक नामित पाइप (FIFO) का उपयोग किया जाता है (जो सिस्टम द्वारा समर्थन पर भी निर्भर करता है; न ही मैनुअल का कहना है कि यदि दोनों तंत्र समर्थित नहीं हैं, तो संभवतः यह गर्भपात करता है एक त्रुटि)। फ़ाइल का नाम तब कमांड लाइन पर तर्क के रूप में पारित किया जाता है।
zsh
इसके अतिरिक्त =(list)
संभव प्रतिस्थापन के रूप में समर्थन करता है <(list)
। =(list)
अस्थायी फ़ाइल के साथ फ़ाइल के बजाय /dev/fd
या FIFO में उपयोग किया जाता है । <(list)
यदि प्रोग्राम को आउटपुट में लेसेक करने की आवश्यकता है , तो इसे प्रतिस्थापन के रूप में उपयोग किया जा सकता है ।
ZSH मैनुअल के अनुसार अन्य मुद्दों के साथ भी हो सकता है कि कैसे <(list)
काम करता है:
=
के रूप में दोनों रूप से उपयोगी है /dev/fd
और के नाम पर रखा गया पाइप कार्यान्वयन <(...)
कमियां हैं। पूर्व के मामले में, कुछ प्रोग्राम कमांड लाइन पर फ़ाइल की जांच करने से पहले प्रश्न में फ़ाइल डिस्क्रिप्टर को स्वचालित रूप से बंद कर सकते हैं, खासकर अगर यह सुरक्षा कारणों से आवश्यक है जैसे कि प्रोग्राम चल रहा है। दूसरे मामले में, यदि प्रोग्राम वास्तव में फ़ाइल नहीं खोलता है, तो उपधारा पाइप से पढ़ने या लिखने का प्रयास करेगा (एक विशिष्ट कार्यान्वयन में, अलग-अलग ऑपरेटिंग सिस्टम में अलग-अलग व्यवहार हो सकते हैं) हमेशा के लिए ब्लॉक हो जाते हैं और स्पष्ट रूप से मारे जाते हैं। । दोनों ही मामलों में, शेल वास्तव में एक पाइप का उपयोग करके जानकारी की आपूर्ति करता है, ताकि प्रोग्राम जो lseek(2)
फ़ाइल पर लेसेक (मैन पेज देखें ) की अपेक्षा करता है, वह काम नहीं करेगा।
pfctl -f <(echo "pf rules")
खराब फाइल डिस्क्रिप्टर क्यों कहेगा। इसके बजाय zsh और = (इको "pf रूल्स" का उपयोग करके) काम करता है।