काइल की यूनिक्स / लिनक्स कमांड STDERR को STDOUT के साथ बदलने का काम करती है; हालाँकि स्पष्टीकरण बहुत सही नहीं है। रीडायरेक्टिंग ऑपरेटर कोई भी नकल या नकल नहीं करते हैं, वे प्रवाह को एक अलग दिशा में पुनर्निर्देशित करते हैं।
अस्थायी रूप से 3> & 1 को समाप्त करके काइल की कमान को फिर से शुरू करना, इस अवधारणा को समझना आसान बना देगा:
find /var/log 1>&2 2>&3 3>&1
इस तरह से लिखा गया है, लेकिन लिनक्स एक त्रुटि प्रदर्शित करेगा क्योंकि और 3 अभी तक मौजूद नहीं है क्योंकि यह 3> और 1 से पहले स्थित है। 3> कुछ यह घोषित करने (परिभाषित) करने का एक तरीका है कि हम एक तीसरे पाइप का उपयोग करने जा रहे हैं, इसलिए इसे उस पाइप में पानी प्रवाहित करने से पहले इसे स्थित करना होगा, उदाहरण के लिए जिस तरह से काइल ने इसे लिखा था। इस अन्य तरीके को केवल मनोरंजन के लिए आज़माएं:
((echo "STD1"; anyerror "bbbb"; echo "STD2" ) 3>&1 4>&2 1>&4 2>&3) > newSTDOUT 2> newSTDERR
कॉपियाँ करने का तरीका नहीं होना शर्म की बात है। आप एक ही कमांड में "3> और 1 3> & 2" जैसी चीजें नहीं कर सकते, क्योंकि लिनक्स केवल पहले वाले का उपयोग करेगा और दूसरे को खारिज कर देगा।
मैंने (अभी तक) एक फ़ाइल में त्रुटि और नियमित आउटपुट दोनों को भेजने का एक तरीका नहीं पाया है और एक कमांड के साथ स्टैंडर आउटपुट में त्रुटि की एक प्रति भी भेजें। उदाहरण के लिए, मेरे पास एक क्रॉन नौकरी है जो मैं चाहता हूं कि दोनों आउटपुट (त्रुटि और मानक) एक लॉग फ़ाइल पर जाएं और त्रुटि को भी बाहर जाने के लिए एक ईमेल संदेश मेरे ब्लैकबरी को भेजा जाए। मैं इसे "टी" का उपयोग करके दो आदेशों के साथ कर सकता हूं लेकिन फ़ाइल में नियमित आउटपुट लाइन के बीच त्रुटि सही क्रम में नहीं दिखाई देती है। यह बदसूरत तरीका है जिससे मैंने समस्या का समाधान किया:
((echo "STD1"; sdfr "bbbb"; echo "STD2" ) 3>&1 1>&2 2>&3 | tee -a log1 ) 2>> log1
ध्यान दें कि मुझे दो बार लॉग 1 का उपयोग करना है और मुझे दोनों मामलों में संलग्न करना होगा, एफआईआर "टी" कमांड के लिए "-ए" विकल्प का उपयोग करके और दूसरा ">>" का उपयोग करके।
एक बिल्ली log1 कर आप निम्नलिखित मिलता है:
STD1
STD2
-bash: sdfr: command not found
ध्यान दें कि त्रुटि दूसरी पंक्ति में नहीं दिखनी चाहिए जैसी कि होनी चाहिए।