पर इस अतः धागा और कुछ अन्य धागे मैं रीडायरेक्ट करने के लिए निम्न कमांड को देखा है 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
परंतु:
या >&में ही काम करता हैcshtcsh
[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दोनों की अनुमति देता है &>>और >>&रूपों।