linux - मैं बैड के साथ एक फ़ाइल में stdout और stderr दोनों को पुनर्निर्देशित और संलग्न कैसे कर सकता हूं?




bash redirect (4)

अपने बैश संस्करण के आधार पर ऐसा करने के दो तरीके हैं।

क्लासिक और पोर्टेबल ( बैश प्री -4 ) तरीका है:

cmd >> outfile 2>&1

बैश 4 से शुरू होने वाला एक गैर-लाभकारी तरीका है

cmd &>> outfile

(एनालॉग टू &> outfile )

अच्छी कोडिंग शैली के लिए, आपको चाहिए

  • तय करें कि पोर्टेबिलिटी चिंता का विषय है (फिर क्लासिक तरीके का उपयोग करें)
  • तय करें कि बैश प्री -4 तक पोर्टेबिलिटी भी चिंता का विषय है (फिर क्लासिक तरीके का उपयोग करें)
  • कोई फर्क नहीं पड़ता कि आप किस वाक्यविन्यास का उपयोग करते हैं, इसे उसी स्क्रिप्ट में परिवर्तित नहीं करते हैं (भ्रम!)

यदि आपकी स्क्रिप्ट पहले से ही #!/bin/sh से शुरू होती है (चाहे कोई इरादा हो या नहीं), फिर बैश 4 समाधान, और सामान्य रूप से किसी भी बैश-विशिष्ट कोड को जाने का तरीका नहीं है।

यह भी याद रखें कि बैश 4 &>> केवल छोटा वाक्यविन्यास है - यह किसी भी नई कार्यक्षमता या ऐसा कुछ भी पेश नहीं करता है।

वाक्यविन्यास (अन्य पुनर्निर्देशन वाक्यविन्यास के बगल में) यहां वर्णित है: http://bash-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output

बैश में एक कटा हुआ फ़ाइल में stdout को पुनर्निर्देशित करने के लिए, मुझे उपयोग करना है:

cmd > file.txt

बैश में stdout को पुनर्निर्देशित करने के लिए, फ़ाइल में संलग्न करने के लिए, मुझे उपयोग करना है:

cmd >> file.txt

Stdout और stderr दोनों को एक कटा हुआ फ़ाइल पर रीडायरेक्ट करने के लिए, मुझे उपयोग करना है:

cmd &> file.txt

मैं एक फ़ाइल में संलग्न stdout और stderr दोनों को पुनर्निर्देशित कैसे करूं? cmd &>> file.txt मेरे लिए काम नहीं किया।


इसे इस्तेमाल करे

You_command 1>output.log  2>&1

आपका उपयोग>> x.file bash4 में काम करता है। उसके लिए खेद है : (

यहां कुछ अतिरिक्त सुझाव दिए गए हैं।

0, 1, 2 ... 9 बैश में फाइल डिस्क्रिप्टर हैं।

0 stdin के लिए खड़ा है, 1 stdout के लिए खड़ा है, 2 stderror के लिए खड़ा है। किसी भी अन्य अस्थायी उपयोग के लिए 3 ~ 9 अतिरिक्त है।

ऑपरेटर > या >> (संलग्न) का उपयोग करके किसी फ़ाइल डिस्क्रिप्टर को अन्य फ़ाइल डिस्क्रिप्टर या फ़ाइल पर रीडायरेक्ट किया जा सकता है।

उपयोग: < file_descriptor >> < filename | और file_descriptor >

कृपया http://www.tldp.org/LDP/abs/html/io-redirection.html संदर्भ लें


बैश में आप अलग-अलग फ़ाइलों पर अपने रीडायरेक्ट को स्पष्ट रूप से निर्दिष्ट भी कर सकते हैं:

cmd >log.out 2>log_error.out

संलग्न होगा:

cmd >>log.out 2>>log_error.out

यह ठीक काम करना चाहिए:

your_command 2>&1 | tee -a file.txt

यह file.txt में सभी लॉग स्टोर करेगा और साथ ही उन्हें टर्मिनल पर डंप करेगा।





pipe