शेल catकमांड लाइन पर कमांड को निष्पादित करने से पहले , यह पुनर्निर्देशन के लिए देखता है।
दो पुनर्निर्देशन हैं:
>file1 यह कमांड के मानक आउटपुट को जाने देगा file1।
<file2 यह कमांड के मानक इनपुट से आएगी file2।
तथ्य यह है कि इन पुनर्निर्देशनों को कमांड लाइन पर एक स्थान पर रखा जाता है, कोई फर्क नहीं पड़ता।
$ cat <file2 >file1
के समान है
$ <file2 cat >file1
जो जैसा है वैसा है
$ <file2 >file1 cat
etc.¹
ध्यान दें कि catइन सभी उदाहरणों में उपयोगिता बिना किसी कमांड लाइन तर्क के निष्पादित की जाती है । पुनर्निर्देशन catआदेश के लिए ऑपरेंड नहीं होते हैं, वे शेल को निर्देश देते हैं कि वे पुनर्निर्देशन को कमांड के अंदर और बाहर सेट करें (इसके मानक इनपुट और आउटपुट को फाइलों से जोड़कर)। शेल आदेश को लागू करने से पहले पुनर्निर्देशन सेट करता है ।
cat fileऔर cat <file(या, यदि आप करेंगे, <file cat) के बीच का अंतर यह है कि पहले मामले में, catउपयोगिता स्वयं फ़ाइल खोल रही है, जिसे कमांड लाइन पर एक ऑपरेंड के रूप में दिया जाता है, पढ़ने के लिए, जबकि दूसरे मामले में, शेल होगा फ़ाइल खोलें और catit 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 रिडायरेक्शन]