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




bash redirect (5)

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

cmd >log.out 2>log_error.out

संलग्न होगा:

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

बैश में एक कटा हुआ फ़ाइल में 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 संदर्भ लें


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

क्लासिक और पोर्टेबल ( बैश प्री -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


बैश 4 में (साथ ही जेडएसएच 4.3.11):

cmd &>>outfile

बस बॉक्स से बाहर


cmd >>file.txt 2>&1

बैश रीडायरेक्ट को बाएं से दाएं से निम्नानुसार निष्पादित करता है:

  1. >>file.txt : append मोड में file.txt खोलें और वहां stdout रीडायरेक्ट करें।
  2. 2>&1 : stderr को रीडायरेक्ट करें "जहां वर्तमान में stdout चल रहा है" । इस मामले में, यह संलग्न मोड में खोला गया एक फ़ाइल है। दूसरे शब्दों में, &1 फ़ाइल डिस्क्रिप्टर का पुन: उपयोग करता है जो वर्तमान में उपयोग किए जाने वाले stdout का उपयोग करता है।




pipe