आप के लिए निम्न चाल का उपयोग कर सकते स्वैप stdout और stderr। फिर आप बस नियमित पाइप कार्यक्षमता का उपयोग करें।
( proc1 3>&1 1>&2- 2>&3- ) | proc2
बशर्ते stdoutऔर stderrदोनों शुरुआत में एक ही जगह पर इशारा करें, इससे आपको वह मिलेगा जो आपको चाहिए।
x>yफ़ाइल हैंडल को बदलने के लिए बिट क्या करता है xइसलिए यह अब इसकी जानकारी भेजता है कि फाइल हैंडल yवर्तमान में कहां पर है । हमारे विशिष्ट मामले के लिए:
3>&1एक नया हैंडल बनाता है 3जो वर्तमान हैंडल 1(मूल स्टडआउट) को आउटपुट करेगा , बस इसे नीचे अंतिम बुलेट बिंदु के लिए कहीं और सहेजने के लिए।
1>&2वर्तमान हैंडल (मूल stderr) 1को आउटपुट करने के लिए हैंडल (stdout) को संशोधित करता है ।2
2>&3-वर्तमान हैंडल (मूल stdout 2) के लिए आउटपुट ( संभाल ) को संशोधित करता है ( फिर अंत में) के माध्यम से हैंडल बंद कर देता है ।33-
यह प्रभावी रूप से स्वैप कमांड है जिसे आप एल्गोरिदम को सॉर्ट करते हुए देखते हैं:
temp = value1;
value1 = value2;
value2 = temp;
rc, जो एक और शेल है। उदाहरण के लिए:proc1 |[2] proc2। क्या यह अच्छा नहीं है?bashहालांकि में नहीं ।