Yanıtlar:
kullanmak scriptkomutu. Bir dosyada ekrana giden her şeyi kopyalayacaktır
script -c "sudo apt-get install things" script-file.script
scriptkomut çıkışını bir dosyaya gönderir, ancak ekranda göstermez.
script -c "history" ~/hist.txtve testere çıkışı gösteren Script startedve Script doneama ekranda gerçek komutunun çıktısını görmedik.
historybir dış komut değil, kabuk yapısıdır. Olan şudur: 1) komut dosyası başlar, 2) komut dosyası geçmişi komutunu arar, bulamaz, bu nedenle bunu bir kabuk aracılığıyla çalıştırması gerektiğini tahmin eder. 3) betiği komutu history bir kabuk aracılığıyla çalıştırır 4) yeni bir kabuk başlar ve history internal komutunu çalıştırır. Bu yeni etkileşimli olmayan bir kabuk olduğundan, tarihin söyleyecek hiçbir şeyi yoktur.
scriptetkileşimli olarak da çalıştırılabilir. Sadece scriptkomut istemine yazın. Yeni bir kabuk alacaksınız ve yazdığınız tüm komutların çıktısı kaydedilecektir. Tip exitkabuk sonlandırmak ve dosyayı kaydedin. Varsayılan olarak, çıkış çağrılır typescriptve sizin yazdığınız veya bir komutun çıktısı olan, ekranınızda gösterilen her şeyi içerecektir. historyKomut yine de yeni kabuğunda mevcut olmalıdır.
Bunu teebaşarmak için komutu kullanabilirsiniz .
sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt
Daha fazla bilgi için buraya bakın veyaman tee
Not: Başkalarının belirttiği gibi, 2>&1hataları yakalamak için STDERR'i STDOUT'a yönlendirmek gerekir. Gerçekte ne yaptığının iyi bir açıklaması için bu StackOverflow sorusuna bakın 2>&1.
scriptkomutun alıntılanması gerekmediğinden daha pratiktir . Böylece bas tamamlama gibi avantajların elde edilmesi kolaydır.
-c "something ...": eğer sonra bir kabuğa bırakacak ve o kabuğundan çıktığınızda bitecek. Çoklu komutlara izin verir, vb. Ayrıca, daha fazla “formatlama” bilgisini tutar, bazı şeylerin tekrarlanmasına izin verir (örneğin: ekranı temizle, vb.) (Ancak çıktısını bozabilir ... ymmv)
|&yerine kullanabilirsiniz2>&1 |
tee işi gerektiği gibi yapacak.
Çıktıyı bir dosyaya yakalamak için aşağıdakileri kullanın:
sudo apt-get install your_software | tee log_file.txt
Bu yalnızca çıktıyı yakalayacak, ancak hata mesajlarını almayacaktır. Hata mesajlarını da kaydetmek istiyorsanız, komutu şu şekilde değiştirin:
sudo apt-get install your_software 2>&1 | tee log_file.txt
bash destekleri |&operatörü , sudo apt-get install your_software |& tee log_file.txtirade borusu hem stdout ve stderr için tee. (Şeref JF Sebastian bu başka bir yerde önerdi .)
Apt-get'in (ve genel olarak APT'nin) güzelliğinden biri, günlük dosyalarını hemen hemen her şey için, hatta içinde çektiğiniz herhangi bir komutun terminal çıktısı dahilinde saklamasıdır /var/log/apt. Örneğin, bu benim son girişim /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
Şimdi, gerçek çıktıyla karşılaştırarak:
➜ ~ 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) ...
Beni çoğu durumda alakalı olmayan birkaç satır kurtardı ve otomatik olarak yapıyor. Yani yapmak istediğin şeyi yapmak için fazladan bir komuta ihtiyacın yok, apt-get bunu senin için yapar.
apt-gethaklı mı?