Yanıtlar:
kullanmak script
komutu. Bir dosyada ekrana giden her şeyi kopyalayacaktır
script -c "sudo apt-get install things" script-file.script
script
komut çıkışını bir dosyaya gönderir, ancak ekranda göstermez.
script -c "history" ~/hist.txt
ve testere çıkışı gösteren Script started
ve Script done
ama ekranda gerçek komutunun çıktısını görmedik.
history
bir 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.
script
etkileşimli olarak da çalıştırılabilir. Sadece script
komut istemine yazın. Yeni bir kabuk alacaksınız ve yazdığınız tüm komutların çıktısı kaydedilecektir. Tip exit
kabuk sonlandırmak ve dosyayı kaydedin. Varsayılan olarak, çıkış çağrılır typescript
ve sizin yazdığınız veya bir komutun çıktısı olan, ekranınızda gösterilen her şeyi içerecektir. history
Komut yine de yeni kabuğunda mevcut olmalıdır.
Bunu tee
baş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>&1
hataları 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
.
script
komutun 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.txt
irade 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-get
haklı mı?