मैं stderr के साथ-साथ बैश के तहत दोहराए गए कमांड का stdout रखना चाहता हूं। कुछ ऐसा:stderr को stderout duplicating
$ echo "FooBar" (...)
FooBar
FooBar
$
जहां (...) पुनर्निर्देशन अभिव्यक्ति है। क्या यह संभव है?
मैं stderr के साथ-साथ बैश के तहत दोहराए गए कमांड का stdout रखना चाहता हूं। कुछ ऐसा:stderr को stderout duplicating
$ echo "FooBar" (...)
FooBar
FooBar
$
जहां (...) पुनर्निर्देशन अभिव्यक्ति है। क्या यह संभव है?
उपयोग टी:
echo "FooBar" | tee /dev/stderr
या का उपयोग awk/perl/अजगर मैन्युअल प्रतिकृति करने के लिए:
echo "FooBar" | awk '{print;print > "/dev/stderr"}'
echo "FooBar" | perl -pe "print STDERR, $_;"
stderr पर रीडायरेक्ट करने के लिए, मैं >&2
या >/dev/stderr
का उपयोग करूंगा। आउटपुट को दोहराने के लिए, मैं tee
का उपयोग करूंगा। इसके बारे में दोष यह है कि एक अस्थायी फ़ाइल जरूरत है:/dev/stderr साथ
echo "FooBar" | tee /tmp/stdout >&2 ; cat /tmp/stdout
उपयोग प्रक्रिया प्रतिस्थापन: http://tldp.org/LDP/abs/html/process-sub.html
echo "FooBar" | tee >(cat >&2)
टी इस फ़ाइल में पैरामीटर और डुप्लिकेट आउटपुट के रूप में फ़ाइल नाम लेता है। प्रक्रिया प्रतिस्थापन के साथ आप फ़ाइल नाम >(cat)
के बजाय एक प्रक्रिया का उपयोग कर सकते हैं और आप आउटपुट को इस प्रक्रिया से stderr >(cat >&2)
पर रीडायरेक्ट कर सकते हैं।
यह ओएस एक्स जैसे ऑपरेटिंग सिस्टम के लिए एक अच्छा समाधान है, जिसमें/proc फ़ाइल सिस्टम नहीं है। – Meow
echo "FooBar" |tee /dev/stderr
tee: /dev/stderr: Permission denied
RedHat 6,3
echo "FooBar" | (read A ; echo $A ; echo $A >&2)
काम कर रहा है
क्षमा करें, स्पष्टीकरण जोड़ा गया ;-) – defdefred
देखें के साथ काम नहीं कर रहा [कैसे मैं कई आदेशों को stdout भेज सकते हैं?] (Http://unix.stackexchange.com/questions/28503/कैसे-कर सकते हैं-i-send-stdout-to-multi-command) –