2012-04-17 9 views
7

से शुरू हुआ मैं हाल ही में एक शेल कमांड में आया था जो इस तरह दिखता था: "> < इन्फाइल बिल्ली" आउटफाइल, जो कि "बिल्ली infile> outfile" के कार्यात्मक रूप से समतुल्य प्रतीत होता है। उस मामले के लिए, सामान्य प्रपत्र "> आउटफाइल < infile कमांड arg1 ... argN" बन जाता है "कमांड arg1 ... argn infile> outfile"।शैल कमांड ">"

वैसे भी, मैं सोच रहा था कि कोई भी इस बात को विस्तारित कर सकता है कि अग्रणी ">" इस प्रभाव को कैसे प्राप्त करता है, और यदि इसके लिए कोई व्यावहारिक उपयोग है।

+0

यह क्यों कम किया गया था? यह एक अच्छा सवाल है। – Aatch

उत्तर

6

"Bash Reference Manual" पुनर्निर्देशन ऑपरेटर के बारे में निम्नलिखित कहते हैं:

निम्नलिखित पुनर्निर्देशन ऑपरेटरों पूर्व में होना या एक साधारण आदेश के भीतर कहीं भी दिखाई देते हैं या कमांड का अनुसरण कर सकते हो सकता है।

ls -al > listing.txt 
> listing.txt ls -al 
ls > listing.txt -al 

हालांकि मुझे लगता है कि होता है कि पहले सबसे आम रूप है:

तो निम्न कमांड सब बराबर हैं।

ध्यान दें कि पुनर्निर्देशन के रिश्तेदार आदेश, महत्वपूर्ण है, इसलिए यदि आप एक से दूसरे फ़ाइल वर्णनकर्ता रीडायरेक्ट करते हैं, उदाहरण के लिए, निम्नलिखित अलग होगा:

ls > listing.txt 2>&1 # both stdout and stderr go in to listing.txt 

ls 2>&1 > listing.txt # only stdout goes to listing.txt, because stderr was made 
         # a copy of stdout before the redirection of stdout 
4

">" केवल आदेश के आउटपुट को अगली तर्क के रूप में दी गई फ़ाइल में रीडायरेक्ट करता है। सामान्य उपयोग यह आदेश के अंत में जोड़ना है लेकिन यह किसी भी स्थान पर हो सकता है। तो:

> outfile <command><command> > outfile के बराबर है। इनपुट पुनर्निर्देशन के लिए भी यही सच है।

कृपया ध्यान दें कि उपर्युक्त उदाहरणों में <command> कुछ अजीब सिंटैक्स नहीं है - यह केवल मनमानी कमांड को प्रतिस्थापित करता है।

+0

आपको शायद अपने पौराणिक 'कमांड' के आस-पास कोण ब्रैकेट का उपयोग नहीं करना चाहिए - यह उदाहरण को कुछ हद तक भ्रमित करता है। –

+0

@MichaelBurr yeap मैंने इसके बारे में सोचा लेकिन बेहतर प्रारूप के साथ नहीं आ सकता था। –

+1

'> आउटपुट कमांड ','>%%% कमांड%%, '> $ $ कमांड $ – user123444555621

1

बराबर नहीं है:

cat infile > outfile 

दरअसल, यह

cat <infile> outfile 

(सिर्फ इतना है कि बिल्ली के मामले में, cat infile है एक ही cat <infile के रूप में)

एक बार जब आप इसे देख नहीं है कि रास्ता, मूल आदेश अधिक सरल लगता है।

0

आउटपुट को पुनर्निर्देशित करने के लिए साइन (>) से अधिक अग्रणी है। डिफ़ॉल्ट रूप से यह STDOUT को पुनर्निर्देशित करेगा। इस मामले में, STDOUT खाली है और इस प्रकार एक नई और खाली फ़ाइल बनाई गई है (touch output पर समान प्रभाव)।

तुम भी, खाली मौजूदा फ़ाइलों को आदेश की इस शैली का उपयोग कर सकते यानी

$ echo FOO >/tmp/foo 
    $ ls -l /tmp/foo 
    -rw-r--r-- 1 flah wheel 4 Apr 17 01:49 /tmp/foo 
    $ > /tmp/foo 
    $ ls -l /tmp/foo 
    -rw-r--r-- 1 flah wheel 0 Apr 17 01:49 /tmp/foo 
    $ 

अधिक जानकारी के लिए बैश आदमी पेज के पुनर्निर्देशन खंड देखें।

1

एक टिप्पणी।

cat file | command 

यही कारण है, भले ही किसी कारण से आप फाइल करने के लिए वाक्य रचना होना चाहते हैं: यह है क्योंकि आप वास्तव में इस

< file command 

यह सब ज्यादा अक्षम्य बिल्ली की अनुपयोगी उपयोग में आता है लिख सकते हैं आदेश के बाएं, आपको अभी भी cat की आवश्यकता नहीं है!

संबंधित मुद्दे