जवाबों:
script
कमांड का उपयोग करें । यह एक फाइल में स्क्रीन पर जाने वाली हर चीज को कॉपी करेगा
script -c "sudo apt-get install things" script-file.script
script
किसी फ़ाइल में कमांड आउटपुट भेजता है, लेकिन इसे स्क्रीन पर नहीं दिखाता है।
script -c "history" ~/hist.txt
और आउटपुट को इंगित करते देखा Script started
और Script done
, लेकिन मैंने स्क्रीन पर वास्तविक कमांड से आउटपुट नहीं देखा।
history
एक शेल बिल्डिन है, न कि कोई बाहरी कमांड। क्या होता है: 1) स्क्रिप्ट शुरू होती है, 2) स्क्रिप्ट इतिहास कमांड को खोजती है, इसे नहीं ढूंढती है, इसलिए यह अनुमान लगाता है कि इसे एक शेल के माध्यम से चलना चाहिए। 3) स्क्रिप्ट कमांड history
को शेल 4 के माध्यम से चलाता है ) एक नया शेल शुरू होता है और इतिहास के आंतरिक कमांड को निष्पादित करता है। चूंकि यह एक नया गैर-संवादात्मक खोल है, इसलिए इतिहास के पास कहने के लिए कुछ नहीं है।
script
अंतःक्रियात्मक रूप से भी चलाया जा सकता है। बस script
कमांड प्रॉम्प्ट पर टाइप करें । आपको एक नया शेल मिलेगा, और आपके द्वारा टाइप की गई कोई भी कमांड उनके आउटपुट को सेव करेगी। exit
शेल को समाप्त करने और फ़ाइल को बचाने के लिए टाइप करें। डिफ़ॉल्ट रूप से, आउटपुट कहा जाता है typescript
और इसमें आपकी स्क्रीन पर दिखाई जाने वाली सभी चीजें शामिल होंगी, चाहे आपने इसे टाइप किया हो, या यह एक कमांड का आउटपुट था। history
आदेश अभी भी रूप में अच्छी तरह से नए खोल में उपलब्ध होना चाहिए।
tee
इसे पूरा करने के लिए आप कमांड का उपयोग कर सकते हैं ।
sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt
अधिक जानकारी के लिए यहां देखें , या निष्पादित करेंman tee
नोट: जैसा कि दूसरों ने उल्लेख किया है, 2>&1
किसी भी त्रुटि को पकड़ने के लिए STDERR को STDOUT पर पुनर्निर्देशित करना आवश्यक है। वास्तव में क्या करता है की एक अच्छी व्याख्या के लिए इस StackOverflow प्रश्न को देखें 2>&1
।
script
क्योंकि कमांड को उद्धृत करने की आवश्यकता नहीं है। तो बैश पूरा होने जैसे फायदे को पूरा करना आसान है।
-c "something ..."
: यदि आप एक शेल में छोड़ देंगे, और जब आप उस शेल से बाहर निकलेंगे तो समाप्त हो जाएगा। कई कमांड आदि की अनुमति देता है। इसके अलावा यह और अधिक "फ़ॉर्मेटिंग" इन्फोस रखता है, जिससे कुछ और चीज़ों की पुनरावृत्ति की अनुमति मिलती है (जैसे: स्पष्ट स्क्रीन, आदि) (लेकिन यह भी आउटपुट को गड़बड़ कर सकता है ... ymmv)
|&
के बजाय 2>&1 |
पार्टी में
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
। (कुदोस टू जेएफ सेबेस्टियन जिन्होंने यह कहीं और सुझाया ।)
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) ...
इसने मुझे कई लाइनों को बचाया जो ज्यादातर मामलों में प्रासंगिक नहीं हैं, और यह स्वचालित रूप से करता है। तो, आपको किसी भी अतिरिक्त कमांड की आवश्यकता नहीं है जो आप करना चाहते हैं, आपके लिए यह उपयुक्त है।
apt-get
अधिकार के बारे में है?