मैं किसी कमांड के आउटपुट को फ़ाइल में कैसे सहेजूं?
क्या किसी सॉफ्टवेयर का उपयोग किए बिना कोई तरीका है? मैं जानना चाहूंगा कि कैसे ।
मैं किसी कमांड के आउटपुट को फ़ाइल में कैसे सहेजूं?
क्या किसी सॉफ्टवेयर का उपयोग किए बिना कोई तरीका है? मैं जानना चाहूंगा कि कैसे ।
हां यह संभव है, बस आउटपुट (उर्फ) को पुनर्निर्देशित करें stdout
) एक फ़ाइल के लिए:
SomeCommand > SomeFile.txt
या यदि आप डेटा जोड़ना चाहते हैं:
SomeCommand >> SomeFile.txt
अगर आप चाहते हैं stderr
साथ ही इसका उपयोग करें:
SomeCommand &> SomeFile.txt
या यह संलग्न करने के लिए:
SomeCommand &>> SomeFile.txt
यदि आप दोनों चाहते हैं stderr
और आउटपुट कंसोल पर प्रदर्शित और एक फ़ाइल में इसका उपयोग करें:
SomeCommand 2>&1 | tee SomeFile.txt
(यदि आप केवल आउटपुट चाहते हैं, तो ड्रॉप करें 2
ऊपर)
किसी फ़ाइल में कमांड के आउटपुट को लिखने के लिए, मूल रूप से 10 आमतौर पर उपयोग किए जाने वाले तरीके हैं ।
कृपया ध्यान दें कि
n.e.
सिंटैक्स कॉलम में "मौजूदा नहीं"का अर्थ है ।
एक रास्ता है, लेकिन कॉलम में फिट होना बहुत जटिल है । आप इसके बारे में सूची अनुभाग में एक उपयोगी लिंक पा सकते हैं ।
|| visible in terminal || visible in file || existing Syntax || StdOut | StdErr || StdOut | StdErr || file ==========++==========+==========++==========+==========++=========== > || no | yes || yes | no || overwrite >> || no | yes || yes | no || append || | || | || 2> || yes | no || no | yes || overwrite 2>> || yes | no || no | yes || append || | || | || &> || no | no || yes | yes || overwrite &>> || no | no || yes | yes || append || | || | || | tee || yes | yes || yes | no || overwrite | tee -a || yes | yes || yes | no || append || | || | || n.e. (*) || yes | yes || no | yes || overwrite n.e. (*) || yes | yes || no | yes || append || | || | |||& tee || yes | yes || yes | yes || overwrite|& tee -a || yes | yes || yes | yes || append
command > output.txt
मानक आउटपुट स्ट्रीम को केवल फ़ाइल पर पुनर्निर्देशित किया जाएगा, यह टर्मिनल में दिखाई नहीं देगा । यदि फ़ाइल पहले से मौजूद है, तो यह अधिलेखित हो जाती है ।
command >> output.txt
मानक आउटपुट स्ट्रीम को केवल फ़ाइल पर पुनर्निर्देशित किया जाएगा, यह टर्मिनल में दिखाई नहीं देगा । यदि फ़ाइल पहले से मौजूद है, तो नया डेटा फ़ाइल के अंत में जुड़ जाएगा ।
command 2> output.txt
मानक त्रुटि स्ट्रीम केवल फ़ाइल पर पुनर्निर्देशित की जाएगी, यह टर्मिनल में दिखाई नहीं देगी । यदि फ़ाइल पहले से मौजूद है, तो यह अधिलेखित हो जाती है ।
command 2>> output.txt
मानक त्रुटि स्ट्रीम केवल फ़ाइल पर पुनर्निर्देशित की जाएगी, यह टर्मिनल में दिखाई नहीं देगी । यदि फ़ाइल पहले से मौजूद है, तो नया डेटा फ़ाइल के अंत में जुड़ जाएगा ।
command &> output.txt
मानक आउटपुट और मानक त्रुटि स्ट्रीम दोनों को केवल फ़ाइल पर पुनर्निर्देशित किया जाएगा, टर्मिनल में कुछ भी दिखाई नहीं देगा । यदि फ़ाइल पहले से मौजूद है, तो यह अधिलेखित हो जाती है ।
command &>> output.txt
मानक आउटपुट और मानक त्रुटि स्ट्रीम दोनों को केवल फ़ाइल पर पुनर्निर्देशित किया जाएगा, टर्मिनल में कुछ भी दिखाई नहीं देगा । यदि फ़ाइल पहले से मौजूद है, तो नया डेटा फ़ाइल के अंत में जुड़ जाएगा । .
command | tee output.txt
मानक आउटपुट स्ट्रीम को फ़ाइल में कॉपी किया जाएगा, यह अभी भी टर्मिनल में दिखाई देगा । यदि फ़ाइल पहले से मौजूद है, तो यह अधिलेखित हो जाती है ।
command | tee -a output.txt
मानक आउटपुट स्ट्रीम को फ़ाइल में कॉपी किया जाएगा, यह अभी भी टर्मिनल में दिखाई देगा । यदि फ़ाइल पहले से मौजूद है, तो नया डेटा फ़ाइल के अंत में जुड़ जाएगा ।
(*)
बैश में कोई शॉर्टहैंड सिंटैक्स नहीं है जो केवल दूसरे कमांड को पाइपिंग करने की अनुमति देता है, जिसकी आवश्यकता यहां संयोजन में होगी tee
फिर से तालिका को पूरा करने के लिए । अगर आपको वास्तव में ऐसा कुछ चाहिए, तो कृपया देखें "कैसे करने के लिए पाइप stderr, और नहीं stdout?"स्टैक ओवरफ्लो पर कुछ तरीकों से यह कैसे किया जा सकता है जैसे धाराओं को स्वैप करके या प्रक्रिया प्रतिस्थापन का उपयोग करके ।
command |& tee output.txt
टर्मिनल में दिखाई देने के दौरान मानक आउटपुट और मानक त्रुटि स्ट्रीम दोनों को फ़ाइल में कॉपी किया जाएगा । यदि फ़ाइल पहले से मौजूद है, तो यह अधिलेखित हो जाती है ।
command |& tee -a output.txt
टर्मिनल में दिखाई देने के दौरान मानक आउटपुट और मानक त्रुटि स्ट्रीम दोनों को फ़ाइल में कॉपी किया जाएगा । यदि फ़ाइल पहले से मौजूद है, तो नया डेटा फ़ाइल के अंत में जुड़ जाएगा ।
आप भी उपयोग कर सकते हैं tee
आउटपुट को फ़ाइल में भेजने के लिए:
command | tee ~/outputfile.txt
एक मामूली संशोधन एसटीडीआरआर को भी पकड़ लेगा:
command 2>&1 | tee ~/outputfile.txt
या थोड़ा छोटा और कम जटिल:
command |& tee ~/outputfile.txt
tee
यदि आप सक्षम होना चाहते हैं तो उपयोगी है इसे लाइव देखते हुए कमांड आउटपुट कैप्चर करें.
आप कमांड आउटपुट को फ़ाइल में रीडायरेक्ट कर सकते हैं:
your_command >/path/to/file
कमांड आउटपुट को ओवरराइट करने के बजाय फ़ाइल में जोड़ने के लिए, उपयोग करें:
your_command >>/path/to/file
विचार करने के लिए एक वृद्धि -
विभिन्न स्क्रिप्ट आउटपुट में रंग कोड इंजेक्ट करेंगे जो आप अपनी लॉग फ़ाइल को अव्यवस्थित नहीं करना चाहते हैं ।
इसे ठीक करने के लिए आप प्रोग्राम का उपयोग कर सकते हैं sed उन कोड को पट्टी करने के लिए । उदाहरण:
command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
यहां दो अलग-अलग सवाल हैं । पहला शीर्षक में है:
मैं टर्मिनल आउटपुट को फ़ाइल में कैसे सहेजूं?
दूसरा सवाल शरीर में है:
मैं किसी कमांड के आउटपुट को फ़ाइल में कैसे सहेजूं?
यहां पोस्ट किए गए सभी उत्तर दूसरे प्रश्न को संबोधित करते हैं लेकिन कोई भी पहले प्रश्न को संबोधित नहीं करता है जिसमें एक महान उत्तर है यूनिक्स में & लिनक्स:
यह उत्तर एक छोटे से ज्ञात कमांड का उपयोग करता है जिसे कहा जाता है script
जो आपके सभी शेल के आउटपुट को टेक्स्ट फ़ाइल में तब तक सहेजता है जब तक आप टाइप नहीं करते exit
. कमांड आउटपुट अभी भी आपकी स्क्रीन पर दिखाई देता है लेकिन पाठ फ़ाइल में भी दिखाई देता है.
प्रक्रिया सरल है । उपयोग करें:
$ script ~/outputfile.txtScript started, file is /home/rick/outputfile.txt$ command1$ command2$ command3$ exitexitScript done, file is /home/rick/outputfile.txt
फिर कमांड 1, 2 और 3 के अपने रिकॉर्ड किए गए आउटपुट को देखें:
cat ~/outputfile.txt
यह समान है पहले जवाब का:
command |& tee ~/outputfile.txt
|& tee ~/outputfile.txt
प्रत्येक के बाद commnd
.script
कमांड ने पुनः लोड करने का लाभ (या नुकसान) जोड़ा है ~/.bashrc
जब यह शुरू होता है । script
कमांड कमांड प्रॉम्प्ट दिखाता है ($PS1
) आपके द्वारा दर्ज किए गए कमांड(ओं) के बाद । script
कमांड सभी विवरणों को पूरे रंग में रिकॉर्ड करता है । के लिए cron
नौकरियां आदि आप बैश एक्सटेंशन से बचना चाहते हैं । बराबर POSIX sh
पुनर्निर्देशन ऑपरेटर हैं
Bash POSIX------------ --------------foo &> bar foo >bar 2>&1foo &>> bar foo >>bar 2>&1foo |& bar foo 2>&1 | bar
आप देखेंगे कि पॉज़िक्स सुविधा कुछ अर्थों में सरल और अधिक सीधी है । द &>
सिंटैक्स से उधार लिया गया था csh
जो आपको पहले से ही समझा देना चाहिए कि यह एक बुरा विचार है ।
some_command | tee command.log
और some_command > command.log
समस्या यह है कि वे कमांड आउटपुट को सहेजते नहीं हैं command.log
वास्तविक समय में फ़ाइल।
उस समस्या से बचने और वास्तविक समय में कमांड आउटपुट को सहेजने के लिए, आप संलग्न कर सकते हैं unbuffer
, जो के साथ आता है expect
पैकेज.
उदाहरण:
sudo apt-get install expectunbuffer some_command | tee command.logunbuffer some_command > command.log
मान लेना log.py
शामिल हैं:
import timeprint('testing')time.sleep(100) # sleeping for 100 seconds
आप चला सकते हैं unbuffer python log.py | tee command.log
या unbuffer python log.py > command.log
अधिक जानकारी: मैं वास्तविक समय में किसी फ़ाइल में कमांड आउटपुट कैसे बचा सकता हूं?
यदि आप कमांड चलाते समय फ़ाइल में आउटपुट करना चाहते हैं:
script -c ./path/to/executable.bash -f log.txt