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




bash file-io (6)

बैश में, कॉलिंग foo stdout पर उस कमांड से कोई भी आउटपुट प्रदर्शित करेगा।

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

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


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

ls -lR / | tee -a output.file

इस उपयोग के मामले से बोनस का जवाब मुझे यहां लाया:

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

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

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

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


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

पैकेज unbuffer फेडोरा और redhat यूनिक्स रिलीज के तहत कुछ पैकेज के साथ मुद्दों का समर्थन है।

परेशानियों को दूर करना

मेरे लिए काम करने के बाद

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

धन्यवाद और आपके इनपुट ने मुझे बहुत समय बचाया ..


जो आदेश आप चाहते हैं उसे tee नाम दिया गया है:

foo | tee output.file

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

ls -a | tee output.file

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

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

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

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

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

< command > |& tee filename # यह एक सामग्री के रूप में कमांड स्थिति के साथ एक फ़ाइल "फ़ाइल नाम" बना देगा, अगर कोई फ़ाइल पहले से मौजूद है तो यह अस्तित्व में सामग्री को हटा देगी और कमांड स्थिति लिख जाएगी।

< command > | tee >> filename < command > | tee >> filename # यह < command > | tee >> filename स्थिति जोड़ देगा लेकिन यह standard_output (स्क्रीन) पर कमांड स्थिति मुद्रित नहीं करता है।

मैं स्क्रीन पर "गूंज" का उपयोग करके कुछ प्रिंट करना चाहता हूं और उस फ़ाइल को प्रतिबिंबित करना चाहता हूं जो फ़ाइल को प्रतिबिंबित करता है

echo "hi there, Have to print this on screen and append to a file" 

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





stdout