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


25

मैं बीओटीएचsudo apt-get install द्वारा स्थापना की प्रक्रिया (मेरे मामले में लंबे समय तक) को देखकर और इसके आउटपुट को एक टेक्स्ट फ़ाइल में कैसे चला सकता हूं ?


केवल apt-getअधिकार के बारे में है?
ब्रिअम

@Braiam मुझे लगता है कि मेरे द्वारा स्वीकार किए गए समाधान को अन्य सभी आदेशों पर लागू किया जा सकता है, क्या आपको ऐसा लगता है?

जवाबों:


17

scriptकमांड का उपयोग करें । यह एक फाइल में स्क्रीन पर जाने वाली हर चीज को कॉपी करेगा

script -c "sudo apt-get install things" script-file.script

scriptकिसी फ़ाइल में कमांड आउटपुट भेजता है, लेकिन इसे स्क्रीन पर नहीं दिखाता है।
हारून

2
@ BryceAtNetwork23। क्या आपने कमांड की कोशिश की? स्क्रिप्ट करता है स्क्रीन के लिए भेजें उत्पादन।
exore

1
मैंने किया। मैंने भाग लिया script -c "history" ~/hist.txtऔर आउटपुट को इंगित करते देखा Script startedऔर Script done, लेकिन मैंने स्क्रीन पर वास्तविक कमांड से आउटपुट नहीं देखा।
आरोन

10
@ BryceAtNetwork23 historyएक शेल बिल्डिन है, न कि कोई बाहरी कमांड। क्या होता है: 1) स्क्रिप्ट शुरू होती है, 2) स्क्रिप्ट इतिहास कमांड को खोजती है, इसे नहीं ढूंढती है, इसलिए यह अनुमान लगाता है कि इसे एक शेल के माध्यम से चलना चाहिए। 3) स्क्रिप्ट कमांड history को शेल 4 के माध्यम से चलाता है ) एक नया शेल शुरू होता है और इतिहास के आंतरिक कमांड को निष्पादित करता है। चूंकि यह एक नया गैर-संवादात्मक खोल है, इसलिए इतिहास के पास कहने के लिए कुछ नहीं है।
exore

1
scriptअंतःक्रियात्मक रूप से भी चलाया जा सकता है। बस scriptकमांड प्रॉम्प्ट पर टाइप करें । आपको एक नया शेल मिलेगा, और आपके द्वारा टाइप की गई कोई भी कमांड उनके आउटपुट को सेव करेगी। exitशेल को समाप्त करने और फ़ाइल को बचाने के लिए टाइप करें। डिफ़ॉल्ट रूप से, आउटपुट कहा जाता है typescriptऔर इसमें आपकी स्क्रीन पर दिखाई जाने वाली सभी चीजें शामिल होंगी, चाहे आपने इसे टाइप किया हो, या यह एक कमांड का आउटपुट था। historyआदेश अभी भी रूप में अच्छी तरह से नए खोल में उपलब्ध होना चाहिए।
ब्रायन मिंटन

52

teeइसे पूरा करने के लिए आप कमांड का उपयोग कर सकते हैं ।

sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt

अधिक जानकारी के लिए यहां देखें , या निष्पादित करेंman tee

नोट: जैसा कि दूसरों ने उल्लेख किया है, 2>&1किसी भी त्रुटि को पकड़ने के लिए STDERR को STDOUT पर पुनर्निर्देशित करना आवश्यक है। वास्तव में क्या करता है की एक अच्छी व्याख्या के लिए इस StackOverflow प्रश्न को देखें 2>&1


मैं "" से पहले "2> & 1" जोड़ूंगा
ओलिवियर दुलक

2
यह अधिक व्यावहारिक है scriptक्योंकि कमांड को उद्धृत करने की आवश्यकता नहीं है। तो बैश पूरा होने जैसे फायदे को पूरा करना आसान है।
दान

2
@ दान: स्क्रिप्ट की आवश्यकता नहीं है -c "something ...": यदि आप एक शेल में छोड़ देंगे, और जब आप उस शेल से बाहर निकलेंगे तो समाप्त हो जाएगा। कई कमांड आदि की अनुमति देता है। इसके अलावा यह और अधिक "फ़ॉर्मेटिंग" इन्फोस रखता है, जिससे कुछ और चीज़ों की पुनरावृत्ति की अनुमति मिलती है (जैसे: स्पष्ट स्क्रीन, आदि) (लेकिन यह भी आउटपुट को गड़बड़ कर सकता है ... ymmv)
ओलिवियर

2
@ दान + कार्यों, उपनामों, बिल्डिंस और यहां तक ​​कि कमांड समूहों और उपधाराओं के साथ काम करता है। यह स्वीकृत उत्तर IMO होना चाहिए।
डार्कहॉग

1
आप इस्तेमाल कर सकते हैं |&के बजाय 2>&1 |पार्टी में
JFS

15

tee आवश्यकतानुसार काम करेंगे।

फ़ाइल में आउटपुट कैप्चर करने के लिए, उपयोग करें:

sudo apt-get install your_software | tee log_file.txt

यह केवल आउटपुट कैप्चर करेगा, लेकिन कोई त्रुटि संदेश नहीं। यदि आप भी त्रुटि संदेश रिकॉर्ड करना चाहते हैं, तो कमांड को संशोधित करें:

sudo apt-get install your_software 2>&1  | tee log_file.txt

या, चूंकि ऑपरेटर bash का समर्थन करता है|& , sudo apt-get install your_software |& tee log_file.txtदोनों को stdout और stderr को पाइप करेगा tee। (कुदोस टू जेएफ सेबेस्टियन जिन्होंने यह कहीं और सुझाया ।)
एलियाह कगन

9

Apt-get (और सामान्य रूप से APT) की सुंदरता में से एक यह है कि वे लगभग सभी चीज़ों के लिए लॉग फ़ाइलों को संग्रहीत करते हैं, यहां तक ​​कि किसी भी कमांड के टर्मिनल आउटपुट, जिसे आप गर्त चलाते हैं, में /var/log/apt। उदाहरण के लिए, यह मेरे में अंतिम प्रविष्टि है /var/log/apt/term.log:

Log started: 2014-06-20  16:46:08
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Log ended: 2014-06-20  16:46:33

अब, वास्तविक उत्पादन के साथ तुलना:

➜  ~  sudo apt-get remove xdotool 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libxdo3
Use 'apt-get autoremove' to remove it.
The following packages will be REMOVED:
  xdotool
0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded.
After this operation, 135 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...

इसने मुझे कई लाइनों को बचाया जो ज्यादातर मामलों में प्रासंगिक नहीं हैं, और यह स्वचालित रूप से करता है। तो, आपको किसी भी अतिरिक्त कमांड की आवश्यकता नहीं है जो आप करना चाहते हैं, आपके लिए यह उपयुक्त है।


1

टी कमान की कोशिश करो । आप यहां कुछ उदाहरण पा सकते हैं।

सरल उपयोग:

  <command> | tee file

उदाहरण:

  sudo apt-get install whatYouWant | tee outputFile
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.