Jawaban:
gunakan script
perintah. Ini akan menyalin semua yang masuk ke layar dalam file
script -c "sudo apt-get install things" script-file.script
script
mengirimkan output perintah ke file, tetapi tidak menunjukkannya di layar.
script -c "history" ~/hist.txt
dan melihat output menunjukkan Script started
dan Script done
, tetapi saya tidak melihat output dari perintah aktual di layar.
history
adalah shell builtint, bukan perintah eksternal. Apa yang terjadi adalah: 1) skrip dimulai, 2) skrip mencari perintah sejarah, tidak menemukannya, jadi tebakan itu harus menjalankan ini melalui shell. 3) skrip menjalankan perintah history
melalui shell 4) shell baru dimulai dan menjalankan perintah internal history. Karena ini adalah shell non-interaktif baru, sejarah tidak ada hubungannya.
script
juga bisa dijalankan secara interaktif. Cukup ketik script
pada prompt perintah. Anda akan mendapatkan shell baru, dan perintah apa pun yang Anda ketik akan menyimpan hasilnya. Ketik exit
untuk mengakhiri shell dan menyimpan file. Secara default, output dipanggil typescript
dan akan berisi semua yang ditampilkan di layar Anda, apakah Anda mengetiknya, atau itu adalah output dari sebuah perintah. The history
perintah masih harus tersedia di shell baru juga.
Anda dapat menggunakan tee
perintah untuk mencapai ini.
sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt
Lihat di sini untuk info lebih lanjut , atau jalankanman tee
Catatan: Seperti yang disebutkan orang lain, 2>&1
perlu untuk mengarahkan STDERR ke STDOUT untuk menangkap kesalahan. Lihat pertanyaan StackOverflow ini untuk penjelasan yang baik tentang apa yang 2>&1
sebenarnya dilakukan.
script
karena perintahnya tidak perlu dikutip. Jadi keuntungan seperti penyelesaian bash lebih mudah untuk dicapai.
-c "something ..."
: jika kemudian akan menjatuhkan Anda ke shell, dan selesai ketika Anda keluar dari shell itu. Mengizinkan banyak perintah, dll. Ditambah lagi, ini membuat lebih banyak info "pemformatan", memungkinkan pemutaran ulang beberapa hal lagi (seperti: hapus layar, dll.) (Tetapi itu juga dapat mengacaukan output ... ymmv)
|&
sebagai ganti 2>&1 |
di bash
tee
akan melakukan pekerjaan sesuai kebutuhan.
Untuk menangkap output ke file, gunakan:
sudo apt-get install your_software | tee log_file.txt
Ini hanya akan menangkap output, tetapi tidak ada pesan kesalahan. Jika Anda juga ingin merekam pesan kesalahan, ubah perintah menjadi:
sudo apt-get install your_software 2>&1 | tee log_file.txt
bash
mendukung |&
operator , sudo apt-get install your_software |& tee log_file.txt
akan menyalurkan stdout dan stderr ke tee
. (Kudos kepada JF Sebastian yang menyarankan ini di tempat lain .)
Salah satu keindahan apt-get (dan APT secara umum) adalah mereka menyimpan file log untuk hampir semua hal, bahkan output terminal dari perintah apa pun yang Anda jalankan, di /var/log/apt
. Misalnya, ini adalah entri terakhir di saya /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
Sekarang, bandingkan dengan output aktual:
➜ ~ 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) ...
Ini menyelamatkan saya beberapa baris yang tidak relevan dalam banyak kasus, dan itu secara otomatis. Jadi, Anda tidak perlu perintah tambahan apa pun untuk melakukan apa yang ingin Anda lakukan, apt-get melakukannya untuk Anda.
apt-get
benar?