बैश '<(फ़ाइल सामग्री)' सिंटैक्स को क्या कहा जाता है?


25

सुरक्षा StackExchange पर यह उत्तर फ़ाइल में लाइन उत्पन्न करने के लिए एक दिलचस्प बैश सिंटैक्स का उपयोग करता है:

openssl req -new -x509 -nodes -newkey ec:<(openssl ecparam -name secp384r1) -keyout cert.key -out cert.crt -days 3650

यह बिट विशेष रूप से दिलचस्प है:

<(openssl ecparam -name secp384r1)

बस चल रहा है:

echo <(openssl ecparam -name secp384r1)

मैं वापस आऊंगा /dev/fd/63

तो यह फ़ाइल की सामग्री के साथ एक अस्थायी फ़ाइल विवरणक बनाने के लिए लगता है।

इसे क्या कहा जाता है?


3
ध्यान दें कि परिणामस्वरूप "फ़ाइल" वास्तव में एक नामित पाइप है, और कुछ प्रोग्राम फ़ाइल तर्क के रूप में उनका समर्थन नहीं करते हैं। उदाहरण: के git diff --no-index file1 <(cat file2)साथ विफल हो जाएगा error: /dev/fd/63: unsupported file type:। आप यह भी देख सकते हैं कि error: readlink("/dev/fd/63"): No such file or directoryक्या कार्यान्वयन पाइप के लिए एक सिमलिंक बनाता है (किसी कारण से मेरे लिए एक टूटी हुई कड़ी के रूप में प्रकट होता है)।
केल्विन

जवाबों:


35

इसे प्रक्रिया प्रतिस्थापन कहा जाता है और यह बैश, zsh और ksh (और संभवतः अन्य, मुझे नहीं पता) की एक विशेषता है। यह POSIX नहीं है और आपको इसे पोर्टेबल कोड में उपयोग नहीं करना चाहिए, लेकिन यह बहुत उपयोगी है।

यहाँ bash मैनुअल का प्रासंगिक खंड है:

3.5.6 प्रक्रिया प्रतिस्थापन

प्रक्रिया प्रतिस्थापन का समर्थन उन प्रणालियों पर किया जाता है जो पाइप (FIFOs) या खुली फाइलों के नामकरण की / dev / fd पद्धति का समर्थन करती हैं। का रूप ले लेता है

  <(list) 

या

  >(list) 

प्रक्रिया सूची इसके इनपुट या आउटपुट के साथ एक FIFO या कुछ फ़ाइल / dev / fd से जुड़ी है। इस फ़ाइल का नाम विस्तार के परिणामस्वरूप वर्तमान कमांड के तर्क के रूप में पारित किया गया है। यदि> (सूची) फ़ॉर्म का उपयोग किया जाता है, तो फ़ाइल पर लिखना सूची के लिए इनपुट प्रदान करेगा। यदि <(सूची) फ़ॉर्म का उपयोग किया जाता है, तो सूची के आउटपुट को प्राप्त करने के लिए एक तर्क के रूप में पारित फ़ाइल को पढ़ा जाना चाहिए। ध्यान दें कि <या> और बाएं कोष्ठक के बीच कोई स्थान दिखाई नहीं दे सकता है, अन्यथा निर्माण को पुनर्निर्देशन के रूप में व्याख्या किया जाएगा।

जब उपलब्ध है, प्रक्रिया प्रतिस्थापन पैरामीटर और चर विस्तार, कमांड प्रतिस्थापन, और अंकगणितीय विस्तार के साथ एक साथ किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.