Bir komut satırının çıktısını konsolda nasıl gösterip çıktısını bir metin dosyasına nasıl kaydedebilirim?


25

Nasıl çalıştırabilirsiniz sudo apt-get installtarafından İKİ (uzun benim durumumda) kurulum sürecini gördükten ve bir metin dosyasına çıktısı tasarrufu?


Sadece apt-gethaklı mı?
Braiam

@Braiam Kabul ettiğim çözümün diğer tüm komutlara da uygulanabileceğini düşünüyorum, öyle mi düşünüyorsunuz?

Yanıtlar:


17

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.
Aaron

2
@ BryceAtNetwork23. Komutu denedin mi? komut yapar ekrana gönderme çıkışı.
14'te

1
Yaptım. Koştum script -c "history" ~/hist.txtve testere çıkışı gösteren Script startedve Script doneama ekranda gerçek komutunun çıktısını görmedik.
Aaron

10
@ BryceAtNetwork23 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.
14'te

1
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.
Brian Minton

52

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.


"|" Den önce "2> & 1" eklerdim.
Olivier Dulac

2
Bu, scriptkomutun alıntılanması gerekmediğinden daha pratiktir . Böylece bas tamamlama gibi avantajların elde edilmesi kolaydır.
Dan

2
@Dan: betiğe gerek yok -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)
Olivier Dulac

2
@Dan + fonksiyonlar, takma adlar, yerleşikler ve hatta komut grupları ve alt kabuklarla çalışır. Bu kabul edilen cevap IMO olmalıdır.
Darkhogg,

1
bash |&yerine kullanabilirsiniz2>&1 |
jfs

15

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

Veya, çünkü 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 .)
Eliah Kagan

9

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.


1

tee komutunu deneyin . Sen buldu edebilirsiniz burada bazı örnekler.

Basit kullanım:

  <command> | tee file

örnek:

  sudo apt-get install whatYouWant | tee outputFile
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.