जवाबों:
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अधिकार के बारे में है?