एक नंगे <क्या करता है?


10

bash यदि आप एक कमांड चलाते हैं तो शिकायत करना प्रतीत नहीं होता

$ < some-file-that-exists

लगता कुछ भी नहीं है।

आप भी इस्तेमाल कर सकते हैं

$ <<<"any string"

और यहां तक ​​कि प्रतिस्थापन की प्रक्रिया।

तो वास्तव में यह क्या करता है, और इसकी अनुमति क्यों है। क्या यह किसी भी चीज के लिए उपयोगी हो सकता है?


BTW: महान ZSH के लिए, "<फोब्बर" शेल के लिए आपके पुनर्निर्देशित फ़ॉबर के रूप में "कम फोब्बर" के समान है। मुझे लगता है कि यह काफी सहज व्यवहार है। एक नंगे <आपको एक त्रुटि देगा ( zsh: parse error near `\n') क्योंकि कोई तर्क नहीं दिया गया है।
गणित

@ इसमें आपको एक समान त्रुटि मिलेगी bash, लेकिन यह दिलचस्प है less
धमाका गोलियां

जवाबों:


20

<पुनर्निर्देशन निर्देश के पहले या बाद के निर्देशों के बाद हो सकता है। अर्थात

$ < file wc

साथ ही काम करता है

$ wc < file

लेकिन अगर आप एक कमांड नहीं देते हैं, तो बैश पुनर्निर्देशन सेट करता है और कुछ और नहीं करता है। इनपुट पुनर्निर्देशन के लिए, आपने जो देखा, वह कुछ भी नहीं है, यदि फ़ाइल मौजूद है और पठनीय है। यदि फ़ाइल मौजूद नहीं है या पढ़ने योग्य नहीं है तो बैश एक त्रुटि का संकेत देगा। आउटपुट पुनर्निर्देशन के लिए, आउटपुट फ़ाइल बनाई जाएगी यदि वह मौजूद नहीं है। यदि >उपयोग किया जाता है तो किसी भी मौजूदा आउटपुट फ़ाइल को छोटा कर दिया जाएगा ; यदि >>उपयोग किया जाता है तो कोई छंटनी नहीं होती है।


दूसरे शब्दों में, वे एक संक्षिप्त अस्तित्व हैं और बनाते हैं
शाफ़्ट सनकी

@ काइल जोन्स मुझे लगता है कि आपने आखिरी वाक्य में दो ऑपरेटरों को बेमेल कर दिया।
jamesbtate

@Puddingfox धन्यवाद। मैंने स्पष्ट करने के लिए अंत में रन-ऑन वाक्य संपादित किया है।
काइल जोन्स

क्या इसका कोई कारण है < file wcबनाम wc < file?
विस्फोट

1
@ टांडू इंटरेक्टिव गोले का उपयोग करते समय काम आता है। मान लें कि आपके पास एक आदेश है जो पुनर्निर्देशन का उपयोग करता है और आप इसे एक अलग अंतिम तर्क के साथ दोहराना चाहते हैं। यदि पुनर्निर्देशन पंक्ति की शुरुआत में है, तो नियंत्रण-पी टाइप करना आसान है और फिर अंतिम तर्क को "<foo> बार 2> & 1" भाषा पर छोड़ें बिना संपादित करें क्योंकि आप इसे अंत में चाहते थे। इसके अलावा, मुझे इसका कोई फायदा नहीं मिला है।
काइल जोन्स

5

<डिफ़ॉल्ट रूप से, या फ़ाइल द्वारा स्टड से पढ़ता है। आपकी अभिव्यक्ति इनपुट के साथ कुछ भी नहीं करती है क्योंकि आपने पढ़ने के बाद भी कुछ नहीं किया।

यदि आप अंत में <some-file-that-मौजूद> outputfile करते हैं, तो आप देखेंगे कि आपने अभी पहली फ़ाइल की सामग्री को पढ़ा है और इसे दूसरी फ़ाइल में लिखा है।

<<< यहाँ डॉक्टर प्रारूप है, इसलिए यह एक फ़ाइल के बजाय एक स्ट्रिंग से पढ़ता है। बिल्ली <<< "किसी भी स्ट्रिंग" को देखने के लिए कि आपने क्या पढ़ा है।


2
भविष्य के संदर्भ के लिए, कृपया एक टिप्पणी जोड़ने के बजाय विवरण जोड़ने के लिए अपना उत्तर संपादित करें
Nate Koppenhaver

2
"यदि आप अंत में <कुछ-फ़ाइल-उस-मौजूद> outputfile करते हैं, तो आप देखेंगे कि आपने अभी पहली फ़ाइल की सामग्री को पढ़ा है और इसे दूसरी फ़ाइल में लिखा है।" ये गलत है; कमांड के बिना आउटपुट फ़ाइल को शून्य बाइट्स में विभाजित किया जाएगा।
काइल जोन्स 20
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.