निर्धारित करें कि क्या आउटपुट स्टडआउट या स्टडर है


22

मैं यह कैसे निर्धारित कर सकता हूं कि क्या प्रक्रिया एक आउटपुट है stdout या stderr?

जवाबों:


22

केवल तीन तरीके हैं जो मैं यह निर्धारित करने के लिए जानता हूं कि एसटीडीयूएसटी और एसटीडीआरआर के लिए एक कार्यक्रम क्या होगा

  1. प्रलेखन पढ़ें। या

  2. पुनर्निर्देशन के साथ प्रयोग ion

  3. STDERR को लाल रंग में प्रिंट करें

†उदाहरण के लिए:

program > program.stdout 2> program.stderr

फिर दो आउटपुट फ़ाइलों को देखें कि प्रोग्राम ने STDOUT को क्या लिखा है और यह STDERR को क्या लिखा है।

रीडायरेक्शन के बजाय teeयदि आप स्क्रीन और साथ ही फ़ाइल में जारी रखने के लिए आउटपुट की आवश्यकता है, तो आप पाइप कर सकते हैं । Https://stackoverflow.com/q/692000/477035 देखें


15
मैं आमतौर पर विकल्प 3 की भिन्नता का उपयोग करता हूं: program | grep .लाल रंग में STDOUT प्रिंट करता है।
डेनिस

लाल रंग में मुद्रण बहुत ज्यादा वही है जो मैं देख रहा था। धन्यवाद RedGrittyBrick & डेनिस
राउफले

7

आपके टिप्पणी अनुरोध के आधार पर:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'

3
प्रभावशाली लगता है। लेकिन क्या आप चेरी को अपने पेड़ से जोड़ना चाहेंगे, और समझाएंगे कि यह क्या कर रही है? यहाँ हर कोई गुरु नहीं है - और आपका निर्माण थोड़ा जटिल है;)
इज़्ज़ी

कोष्ठक आदेश देने के लिए हैं। मुझे वास्तव में आई-भूल-ए-जहाँ से सटीक रूप मिला है, लेकिन बिंदु अतिरिक्त फ़ाइल डिस्क्रिप्टर का उपयोग करना है (1 = stdoutऔर 2 = से परे stderr) कोष्ठक के आंतरिक सेट का आउटपुट लेने के लिए, और stdoutएक sedकमांड के stderrमाध्यम से चलता है , जबकि से होकर जाता है एक अलग।
zebediah49

वाह। उन अतिरिक्त डिस्क्रिप्टर का उपयोग करना नहीं जानता था। पहले मैं थोड़ा उलझन में था (मुझे यह समझना पसंद है कि मैं क्या चलाता हूं - और घुंघराले ब्रेसिज़ के साथ थोड़ा भ्रमित हो गया)। लेकिन अब यह स्पष्ट है - और IMHO बिल्कुल वही है जो ओपी चाहता था। तो मुझ से +1 :)
Izzy

इससे मुझे मदद मिली। मैं stderr में और अधिक डेटा जोड़ना चाहता था। यह करता है और stdout / stderr पर सब कुछ ठीक से आउटपुट करता है। { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
ब्रायन ड्रियरी

0

आप बस एक फ़ाइल में stderr पुनर्निर्देशित कर सकते हैं और अगर इसमें कुछ भी दिखाई देता है, तो यह stderr से है।

जैसे ls -a 2> ls-all.txt

यदि किसी कारण से किसी त्रुटि के लिए stderr को भेजा गया था, तो उसे इस फ़ाइल पर भेज दिया जाएगा।


-1

यदि आप इसे एक बार बंद करना चाहते हैं, तो उनमें से एक को कहीं और पुनर्निर्देशित करें।

उदाहरण, मानक को पुनर्निर्देशित करना >

ls -al> ls-l.txt (यहाँ कोई भी आउटपुट stdout से नहीं है, अगर आपको कुछ भी दिखता है तो उसे stderout आउटपुट होना चाहिए)

Stderr पुनर्निर्देशन उपयोग के लिए 2>


इस प्रक्रिया में आउटपुट की एक निरंतर धारा बनती है, कुछ को stderr को stdout किया जाता है। मैं यह निर्धारित करना चाहता हूं कि यह आउटपुट स्क्रीन पर कौन सा है
राउफ़ल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.