कुछ लिनक्स कार्यक्रमों का आउटपुट न तो STDOUT और न ही STDERR पर जाता है?
वास्तव में, मैं जानना चाहता हूं कि सभी प्रोग्राम आउटपुट को मज़बूती से कैसे कैप्चर किया जाए, इससे कोई फर्क नहीं पड़ता कि यह किस 'स्ट्रीम' का उपयोग करता है। मेरे पास समस्या यह है कि कुछ प्रोग्राम अपने आउटपुट को कैप्चर करने नहीं देते हैं।
एक उदाहरण 'समय' है:
time sleep 1 2>&1 > /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
या
time sleep 1 &> /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
मुझे दोनों समय आउटपुट क्यों दिखाई देता है? मुझे उम्मीद थी कि यह सब / देव / अशक्त हो जाएगा ।
समय का उपयोग करते हुए क्या आउटपुट स्ट्रीम है, और मैं इसे एक फ़ाइल में कैसे पाइप कर सकता हूं?
समस्या के चारों ओर काम करने का एक तरीका है बैश स्क्रिप्ट बनाना , उदाहरण के लिए, combine.sh
जिसमें यह कमांड है:
$@ 2>&1
फिर 'टाइम' के आउटपुट को सही तरीके से कैप्चर किया जा सकता है:
combine.sh time sleep 1 &> /dev/null
(कोई आउटपुट नहीं देखा गया - सही)
क्या एक अलग संयोजन स्क्रिप्ट का उपयोग किए बिना मैं जो चाहता हूं उसे प्राप्त करने का एक तरीका है?
2>&1 > /dev/null
"2" अब 1 पर जाता है (यानी, टर्मिनल, डिफ़ॉल्ट रूप से), और फिर 1 अब / देव / शून्य पर जाता है (लेकिन 2 अभी भी टर्मिनल पर जाता है!)>/dev/null 2>&1
कहने के लिए उपयोग करें। "मैं अब 1 / dev / null में जाता हूं, फिर 2 1 पर जाता है (यानी, / dev / null के लिए)। यह अभी भी यहाँ काम नहीं करेगा क्योंकि निर्मित 'समय' पुनर्निर्देशित नहीं होगा, लेकिन आम तौर पर सही है (उदाहरण के लिए यदि आप उपयोग करते हैं तो यह काम करेगा / usr / bin / time)। "2> और 1" के बारे में 1 में 1 की "दिशा" की नकल करने के बारे में सोचें, 2 के रूप में 1 से 1 तक नहीं जा रहा है