दिलचस्प पोस्ट
निम्नलिखित वाक्यांशों का क्या अर्थ है सी ++: शून्य-, डिफ़ॉल्ट- और मूल्य-आरंभीकरण? एंड्रॉइड टेलीग्राम ऐप -> java.lang.UnsatisfiedLinkError: शून्य के लिए कोई क्रियान्वयन नहीं मिला jQuery के बनाम दस्तावेज़.क्वायरसचारेक सभी मैं एक PHP फार्म कैसे बना सकता हूं जो स्वयं को सबमिट करता है? क्या मैं jQuery के साथ पृष्ठभूमि छवि (सीएसएस: पृष्ठभूमि-छवि) में फीका कर सकता हूं? मैं एक SQLite डेटाबेस में datetime मान कैसे सम्मिलित कर सकता हूँ? क्या किसी विशिष्ट मूल्य के लिए अल्पविराम से अलग कॉलम क्वेरी करना संभव है? JQuery.fn क्या मतलब है? विंडोज़ फार्मों के निष्पादन निर्देशिका के लिए पथ प्राप्त करें सी, पायथन – मॉड्यूलो (%) ऑपरेशन के विभिन्न व्यवहार पायथन में स्ट्रिंग के अंदर से एक सबस्ट्रिंग कैसे निकालना है? मैं एक विंडोज़ अनुप्रयोग में कुछ दृश्य डिस्प्ले पर stdout कैसे रीडायरेक्ट कर सकता हूं? जावास्क्रिप्ट में मैं UTC टाइमस्टैम्प कैसे प्राप्त करूं? मूल घटक के एजेक्स अपडेट में बाल घटक को बाहर कैसे करें? क्लास मेथड्स या क्लास को फिर से परिभाषित करें

एक फ़ाइल और stdout में आउटपुट को कैसे रीडायरेक्ट करें

Bash में, कॉलिंग foo stdout पर उस कमांड से कोई आउटपुट दिखाएगा।

कॉलिंग foo > output उस कमांड से किसी भी आउटपुट को निर्दिष्ट फाइल में रीडायरेक्ट करेगा (इस मामले में 'आउटपुट')।

क्या आउटपुट को फाइल में रीडायरेक्ट करने और इसे स्टडआउट पर प्रदर्शित करने का एक तरीका है?

वेब के समाधान से एकत्रित समाधान "एक फ़ाइल और stdout में आउटपुट को कैसे रीडायरेक्ट करें"

जो कमांड आपको चाहिए वह नाम tee नाम दिया गया है:

 foo | tee output.file 

उदाहरण के लिए, यदि आप केवल stdout की परवाह करते हैं:

 ls -a | tee output.file 

यदि आप stderr को शामिल करना चाहते हैं, तो करें:

 program [arguments...] 2>&1 | tee outfile 

2>&1 चैनल (stdout / मानक आउटपुट) में चैनल 2 (स्टेडरर / मानक त्रुटि) रीडायरेक्ट करता है, जैसे कि दोनों stdout के रूप में लिखा जाता है। यह tee आदेश के रूप में दी गई आउटपुट फाइल को भी निर्देशित किया जाता है

इसके अलावा, यदि आप लॉग फ़ाइल में जोड़ना चाहते हैं, तो tee -a उपयोग करें:

 program [arguments...] 2>&1 | tee -a outfile 
 $ program [arguments...] 2>&1 | tee outfile 

2>&1 स्टैडरर और स्टड आउट धाराओं को डंप करता है tee outfile इसे स्ट्रीम ले लेता है और इसे स्क्रीन और "आउटफाइल" फ़ाइल में लिखता है।

संभवतया यह है कि ज्यादातर लोग क्या चाहते हैं। संभावित परिस्थिति कुछ प्रोग्राम या स्क्रिप्ट लंबे समय से कड़ी मेहनत कर रही है और कई आउटपुट का उत्पादन करती है। उपयोगकर्ता प्रगति के लिए समय-समय पर जांचना चाहता है, लेकिन यह भी चाहता है कि एक फ़ाइल में लिखे गए आउटपुट।

समस्या (विशेषकर जब स्टडआउट और सीडीआरआर धाराओं को मिलाते हुए) यह है कि प्रोग्राम द्वारा फ्लाई किए जाने वाले नदियों पर निर्भरता है। उदाहरण के लिए, अगर सभी स्टेडाउट में लिखते हैं तो इन्हें फ्लेवर नहीं किया जाता है , लेकिन स्टडरर को लिखने वाले सभी को प्लावित किया जाता है, फिर वे आउटपुट फाइल में और स्क्रीन पर कालानुक्रमिक क्रम से समाप्त हो जाएंगे।

यह भी बुरा है यदि कार्यक्रम केवल प्रगति की रिपोर्ट करने के लिए प्रत्येक या कुछ मिनटों में 1 या 2 पंक्तियां दिखाता है। ऐसे मामले में, अगर प्रोग्राम को प्रोग्राम द्वारा फ्लेवर नहीं किया जाता है, तो उपयोगकर्ता स्क्रीन पर किसी भी आउटपुट को घंटों तक नहीं देख पाएगा, क्योंकि इसमें से कोई भी घंटों के लिए पाइप के माध्यम से धकेलना नहीं होगा।

अद्यतन: कार्यक्रम unbuffer , expect पैकेज का हिस्सा, बफरिंग समस्या का समाधान करेगा। इससे stdout और stderr को स्क्रीन और फ़ाइल को तुरंत लिखना होगा और उन्हें एकत्रित होने पर सिंक में रखना होगा और tee लिए रीडायरेक्ट किया जाएगा। उदाहरण के लिए:

 $ unbuffer program [arguments...] 2>&1 | tee outfile 

एक और तरीका है जो मेरे लिए काम करता है,

 <command> |& tee <outputFile> 

जैसा कि gnu bash मैनुअल में दिखाया गया है

उदाहरण:

 ls |& tee files.txt 

यदि '| &' का उपयोग किया जाता है, तो कमांड 1 की मानक त्रुटि , इसके मानक आउटपुट के अतिरिक्त, पाइप के माध्यम से कमांड 2 के मानक इनपुट से जुड़ा है; यह 2> और 1 | के लिए लघुकथा है मानक आउटपुट के लिए मानक त्रुटि का यह पूर्ण पुनर्निर्देशन आदेश द्वारा निर्दिष्ट किसी भी रीडायरेक्ट के बाद किया जाता है।

अधिक जानकारी के लिए, रीडायरेक्शन देखें

tee आपका दोस्त है

 whatever | tee logfile.txt 

आप प्राथमिक रूप से Zoredache समाधान का उपयोग कर सकते हैं , लेकिन यदि आप आउटपुट फ़ाइल को अधिलेखित नहीं करना चाहते हैं तो आपको निम्न के साथ-साथ एक विकल्प लिखना चाहिए:

 ls -lR / | tee -a output.file 

जोड़ने के लिए कुछ …

पैकेज अनबफर के पास कुछ संकुल के साथ फीडोरा और रेघैट यूनिक्स रिलीज़ के अंतर्गत समर्थन समस्याएं हैं।

मुसीबतों को एक तरफ सेट करना

निम्नलिखित मेरे लिए काम किया

 bash myscript.sh 2>&1 | tee output.log 

धन्यवाद एसडीडीएफ और मैट्यूज आपके इनपुट मुझे बहुत समय बचाया ..

tail -f output का प्रयोग करना चाहिए।

बोनस के उत्तर के बाद से यह उपयोग-केस मुझे यहां लाया गया:

ऐसे मामले में जहां आपको कुछ अन्य उपयोगकर्ता के रूप में ऐसा करने की आवश्यकता है

 echo "some output" | sudo -u some_user tee /some/path/some_file 

ध्यान दें कि प्रतिध्वनि आप के रूप में होगा और फ़ाइल लिखना "some_user" के रूप में होगा जो काम नहीं करेगा अगर आप एको "some_user" के रूप में चलाने के लिए और "some_file" के साथ आउटपुट को रीडायरेक्ट करते हैं, क्योंकि फ़ाइल पुनर्निर्देशन होगा जैसे तुम।

संकेत: टी-ए झंडे के साथ संलग्न करने का भी समर्थन करता है, यदि आपको किसी अन्य उपयोगकर्ता के रूप में एक फ़ाइल में एक पंक्ति को बदलना है, तो आप वांछित उपयोगकर्ता के रूप में एसएएल को निष्पादित कर सकते हैं।

टी इस के लिए एकदम सही है, लेकिन यह भी काम करेगा

 ls -lr / > output | cat output