शेल cat
कमांड लाइन पर कमांड को निष्पादित करने से पहले , यह पुनर्निर्देशन के लिए देखता है।
दो पुनर्निर्देशन हैं:
>file1
यह कमांड के मानक आउटपुट को जाने देगा file1
।
<file2
यह कमांड के मानक इनपुट से आएगी file2
।
तथ्य यह है कि इन पुनर्निर्देशनों को कमांड लाइन पर एक स्थान पर रखा जाता है, कोई फर्क नहीं पड़ता।
$ cat <file2 >file1
के समान है
$ <file2 cat >file1
जो जैसा है वैसा है
$ <file2 >file1 cat
etc.¹
ध्यान दें कि cat
इन सभी उदाहरणों में उपयोगिता बिना किसी कमांड लाइन तर्क के निष्पादित की जाती है । पुनर्निर्देशन cat
आदेश के लिए ऑपरेंड नहीं होते हैं, वे शेल को निर्देश देते हैं कि वे पुनर्निर्देशन को कमांड के अंदर और बाहर सेट करें (इसके मानक इनपुट और आउटपुट को फाइलों से जोड़कर)। शेल आदेश को लागू करने से पहले पुनर्निर्देशन सेट करता है ।
cat file
और cat <file
(या, यदि आप करेंगे, <file cat
) के बीच का अंतर यह है कि पहले मामले में, cat
उपयोगिता स्वयं फ़ाइल खोल रही है, जिसे कमांड लाइन पर एक ऑपरेंड के रूप में दिया जाता है, पढ़ने के लिए, जबकि दूसरे मामले में, शेल होगा फ़ाइल खोलें और cat
it stream के इनपुट स्ट्रीम से कनेक्ट करें। दूसरे मामले में, cat
यह नोटिस करेगा कि इसे एक फ़ाइल ऑपरेंड नहीं दिया गया था और स्वचालित रूप से अपने मानक इनपुट से रीडिंग पर स्विच हो जाएगा। यह cat
कुछ अन्य उपयोगिताओं की विशेषता है , और कुछ ऐसी नहीं जो सभी उपयोगिताओं की हैं।
cat
इसके मानक इनपुट से भी पढ़ेगा यदि इसे ऑपरेंड दिया गया है -
। फिर, यह केवल cat
और कुछ अन्य उपयोगिताओं के लिए विशेष है (अर्थात कुछ भी नहीं जो शेल करता है)। cat
वर्तमान निर्देशिका में एक फ़ाइल का उपयोग करने के लिए जिसका नाम है -
, जैसे फ़ाइल नाम के लिए एक पथ जोड़ें ./-
।
Irect कुछ परिस्थितियों में पुनर्निर्देश का क्रम अभी भी महत्वपूर्ण है; साथ cat <file2 >file1
, उदाहरण के लिए, file1
यदि छोटा कर दिया नहीं किया जाएगा file2
दुर्गम है (पुनर्निर्देशन बाएं से दाएं पार्स कर रहे हैं)। शब्द cat
का सापेक्ष स्थान अभी भी मनमाना है और इस पर प्रभाव नहीं पड़ेगा।
² गैर-मौजूदा फ़ाइल खोलते समय प्रश्न " बिल्ली अलग त्रुटि देती है " यह भी देखें ।
तथ्य यह है कि शेल कमांड लाइन पर कमांड को निष्पादित करने से पहले पुनर्निर्देशन सेट करता है यही कारण है कि ये चीजें विफल होती हैं और आप एक खाली आउटपुट फ़ाइल के साथ समाप्त होते हैं:
$ sort file >file
यहां, शेल फ़ाइल के मानक आउटपुट को file
निष्पादित करने sort file
और कनेक्ट करने से पहले फ़ाइल को छोटा (खाली) कर देगा sort
। तब sort
उपयोगिता file
अपनी सामग्री को खोलेगी और छाँटेगी (जो कुछ भी नहीं है)। परिणाम (कुछ भी नहीं) मानक आउटपुट स्ट्रीम से होकर गुजरा है file
।
इस विशेष मामले में उपाय (एक फ़ाइल "इन-प्लेस" सॉर्ट करने के लिए) है
$ sort -o file file
या
$ sort file >file.sorted && mv file.sorted file
आउटपुट फ़ाइल नाम निर्दिष्ट करने के sort
लिए -o
फ़ाइल का उपयोग करते समय कम या ज्यादा क्या होता है ।
केवल इस कथन का समर्थन करने के लिए कि पुनर्निर्देशन कमांड लाइन पर उपयोगिता के वास्तविक नाम से पहले हो सकता है:
एक "सरल कमांड" वैकल्पिक चर असाइनमेंट और पुनर्निर्देशन का एक क्रम है, किसी भी क्रम में, वैकल्पिक रूप से शब्दों और पुनर्निर्देशन के बाद, एक नियंत्रण ऑपरेटर द्वारा समाप्त किया जाता है। [रेफरी: POSIX शेल कमांड भाषा 2.9.1 सरल कमांड]
और उपयोगिता के ऑपरेंड का हिस्सा नहीं होने के बारे में भी पुनर्निर्देशन:
वैकल्पिक संख्या, पुनर्निर्देशन ऑपरेटर, और शब्द कमांड को प्रदान किए जाने वाले तर्कों में दिखाई नहीं देगा (यदि कोई हो)। [रेफरी: पोसिक्स शेल कमांड लैंग्वेज 2.7 रिडायरेक्शन]