पर इस अतः धागा और कुछ अन्य धागे मैं रीडायरेक्ट करने के लिए निम्न कमांड को देखा है stdout
और stderr
एक फाइल करने के लिए।
क्या वे सभी समान हैं? क्या उनके बीच कोई अंतर है?
command1 >> logfile 2>&1
command &> logfile
command >& logfile
पर इस अतः धागा और कुछ अन्य धागे मैं रीडायरेक्ट करने के लिए निम्न कमांड को देखा है stdout
और stderr
एक फाइल करने के लिए।
क्या वे सभी समान हैं? क्या उनके बीच कोई अंतर है?
command1 >> logfile 2>&1
command &> logfile
command >& logfile
जवाबों:
जब से आपने टैग किया है zsh
, मैं आपको बता दूं कि सभी 3 पुनर्निर्देशन बिल्कुल उसी तरह से काम करते हैं। जैसा कि आपने दोनों डुप्लिकेट पोस्टों (टिप्पणी में एक और आपकी पोस्ट में एक) में पढ़ा होगा, वे सभी को पुनर्निर्देशित stderr
करते हैं, stdout
जिसमें इंटर्न को फाइल 'लॉगफाइल' पर रीडायरेक्ट किया जाता है (यानी, लॉगफाइल में आउटपुट और एरर दोनों होंगे। )।
लेकिन उनका व्यवहार आपके द्वारा किए गए शेल के आधार पर बहुत कुछ बदलता है।
सभी पुनर्निर्देशन के तीन शैलियों में एक ही तरह से अच्छी तरह से काम करता है bash
औरzsh
परंतु:
या >&
में ही काम करता हैcsh
tcsh
[soum@server ~]$ ./test.sh > logfile 2>&1
Ambiguous output redirect.
[soum@server ~]$ ./test.sh &> logfile
Invalid null command.
[soum@server ~]$ ./test.sh >& logfile
[soum@server ~]$ echo $SHELL
/bin/tcsh
[soum@server ~]$
में ksh
केवल 2>&1
काम करता है।
$ ./test.sh >& logfile
-ksh: logfile: bad file unit number
$ ./test.sh &> logfile
[1] 23039
$ 1 2 3 4 5 6 logfile test.sh
ls: cannot access ttr: No such file or directory
[1] + Done(2) ./test.sh &> logfile
मुझे नफरत है ksh
। जबकि >&
बस एक त्रुटि दी, &>
आदेश का एक हिस्सा पृष्ठभूमि में और logfile (यदि खाली नहीं है) खाली कर दिया।
sh
? यदि यह POSIX शेल है, &>
और >&
काम नहीं करेगा।
&>
और >&
अर्ध-समतुल्यता (क्लोबर)zsh
मैनुअल पुनर्निर्देशन अनुभाग कि कहते हैं:
&>
>&
समतुल्य हैं।
दोनों फाइल को क्लॉबर करेंगे - इसे लिखने से पहले फाइल को 0 बाइट्स पर काट दें, जैसे > file
एसटीडीआईएन-केस में होता है।
हालाँकि , bash
मैन्युअल पुनर्निर्देशन अनुभाग कहता है कि:
दो रूपों में से, पहले को प्राथमिकता दी जाती है। यह शब्दार्थ के बराबर है
>word 2>&1
दूसरे रूप का उपयोग करते समय, शब्द किसी संख्या में विस्तारित नहीं हो सकता है
-
। यदि ऐसा होता है, तो अन्य पुनर्निर्देशन ऑपरेटर अनुकूलता कारणों से (नीचे डुप्लिकेटिंग फ़ाइल डिस्क्रिप्टर्स देखें) लागू होते हैं।
इसलिए, जब आप टैग करते हैं, तो zsh
यह संभव है कि पहली बार उंगली की मेमोरी प्राप्त करने के लिए अच्छा अभ्यास हो bash
।
>> logfile 2>&1
और &>>
समतुल्यता (परिशिष्ट)यहां, logfile
ओवरराइट नहीं किया गया है, लेकिन फ़ाइल के अंत में लिखने के लिए खोला गया है, अर्थात एपेंड मोड ( O_APPEND
)।
दोनों में बराबर {ba,z}sh
है:
command1 &>> logfile
में bash
:
मानक आउटपुट और मानक त्रुटि को लागू करने का प्रारूप है:
&>>word
यह शब्दार्थ के बराबर है
>>word 2>&1
(नीचे डुप्लिकेट फ़ाइल डिस्क्रिप्टर्स देखें)।
(नोट: का क़त्ले आम उपयोग &>
से अधिक >&
खंड में ऊपर है फिर से दिया की सिफारिश की वहाँ में जोड़कर के लिए सिर्फ एक ही रास्ता है bash
।)
zsh
दोनों की अनुमति देता है &>>
और >>&
रूपों।