दिलचस्प पोस्ट
java.util.zip.ZipException: डुप्लिकेट प्रविष्टि यूआईएबलबल के अंदर यूआईटीबल के अंदर विस्तार करें जैसे कि "अधिक" बटन जैसे Instagram Apache HttpClient 4.3 में SSL प्रमाणपत्र की उपेक्षा करना एप्पल एंटरप्राइज़ डेवलपर प्रोग्राम का उपयोग कर एक आईओएस एप्लिकेशन को परिनियोजित करना संशोधन क्या है? सिम्युलेटर में स्विफ्ट (आईओएस 8) में एमएफमेल कॉम्पोज़ वीक कंट्रोलर के साथ असली गलतफहमी है एक बाइट की सामग्री की पहचान कैसे करें एक जेपीईजी है? पुनरावर्ती फ़ंक्शन कॉल के बिना क्रमबद्धता एंड्रॉइड: USB का पता लगा रहा है UINavigationController बल बारी बारी से सी फंक्शन कॉस्ट बहुआयामी-सरणी तर्क अजीब चेतावनी सी + + स्थिर वर्चुअल सदस्य? MySQL तालिका का डिफ़ॉल्ट वर्णसेट कैसे बदल सकता है? फ़ॉन्ट भयानक काम नहीं कर रहा है, माउस वर्गों के रूप में दिखा रहा है Int सरणी में सबसे लोकप्रिय तत्व खोजें

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

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

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

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

Solutions Collecting From Web of "एक फ़ाइल और 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