Pertanyaan Bagaimana cara menampilkan output baris perintah di konsol dan menyimpan hasilnya ke file teks?


Bagaimana saya bisa berlari sudo apt-get install oleh KEDUA melihat proses instalasi (panjang dalam kasus saya) dan menyimpan outputnya ke file teks?


23
2018-06-19 13:06


asal


Hanya tentang apt-get kanan? - Braiam
@Braiam Saya pikir solusi yang saya terima dapat diterapkan untuk semua perintah lainnya, apakah Anda berpikir demikian?


Jawaban:


menggunakan script perintah. Ini akan menyalin semua yang masuk ke layar dalam file

script -c "sudo apt-get install things" script-file.script

17
2018-06-19 13:13



script mengirim output perintah ke file, tetapi tidak menunjukkannya di layar. - Aaron
@ BryceAtNetwork23. Apakah Anda mencoba perintahnya? naskah tidak kirim keluaran ke layar. - exore
Aku melakukannya. Saya berlari script -c "history" ~/hist.txt dan melihat output yang menunjukkan Script started dan Script done, tapi saya tidak melihat output dari perintah sebenarnya di layar. - Aaron
@ BryceAtNetwork23 history adalah shell builtint, bukan perintah eksternal. Apa yang terjadi adalah: 1) skrip dimulai, 2) skrip mencari perintah sejarah, tidak menemukannya, sehingga tebakannya harus menjalankan ini melalui shell. 3) skrip menjalankan perintah history  melalui shell 4) shell baru dimulai dan mengeksekusi perintah internal history. Karena ini adalah shell non-interaktif baru, sejarah tidak ada yang perlu dikatakan. - exore
script juga bisa dijalankan secara interaktif. Ketik saja script pada prompt perintah. Anda akan mendapatkan shell baru, dan setiap perintah yang Anda ketikkan akan menyimpan hasilnya. Mengetik exit untuk mengakhiri shell dan menyimpan file. Secara default, output disebut typescript dan itu akan berisi semua yang ditampilkan di layar Anda, apakah Anda mengetiknya, atau itu adalah output dari suatu perintah. Itu history Perintah masih harus tersedia di shell baru juga. - Brian Minton


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 eksekusi man tee

Catatan: Seperti yang telah disebutkan orang lain, 2>&1 diperlukan untuk mengalihkan STDERR ke STDOUT untuk menangkap kesalahan apa pun. Lihat pertanyaan StackOverflow ini untuk penjelasan yang bagus tentang apa 2>&1 sebenarnya.


51
2018-06-19 13:15



Saya akan menambahkan "2> & 1" sebelum "|" - Olivier Dulac
Ini lebih praktis daripada script karena perintahnya tidak harus dikutip. Jadi, keunggulan seperti bash completion lebih mudah dilakukan. - Dan
@Dan: skrip tidak membutuhkan -c "something ...": jika kemudian akan menjatuhkan Anda ke shell, dan selesai saat Anda keluar dari shell itu. Memungkinkan beberapa perintah, dll. Ditambah itu membuat lebih banyak informasi "format", memungkinkan pengulangan beberapa hal lagi (seperti: layar jernih, dll) (tetapi itu juga dapat mengacaukan output ... ymmv) - Olivier Dulac
@Dan + bekerja dengan fungsi, alias, builtins, dan bahkan grup perintah dan subkelompok. Ini harus menjadi jawaban yang diterima IMO. - Darkhogg
Anda bisa menggunakan |& dari pada 2>&1 | di bash - jfs


tee akan melakukan pekerjaan sesuai kebutuhan.

Untuk menangkap output ke dalam 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

14
2018-06-19 14:15



Atau, sejak itu bash  mendukung |& operator, sudo apt-get install your_software |& tee log_file.txt akan menyalurkan keduanya stdout dan stderr untuk tee. (Kudos kepada J.F. Sebastian siapa menyarankan ini di tempat lain.) - Eliah Kagan


Salah satu keindahan apt-get (dan APT secara umum) adalah bahwa mereka menyimpan file-file log untuk hampir semuanya, bahkan output terminal dari setiap perintah yang Anda jalankan melalui, di /var/log/apt. Sebagai contoh, ini adalah entri terakhir di blog saya /var/log/apt/term.log:

Log started: 2014-06-20  16:46:08
(Membaca basis data ... 252472 file dan direktori yang saat ini diinstal.)
Menghapus xdotool (1: 3.20130111.1-3.1) ...
Memproses pemicu untuk man-db (2.6.7.1-1) ...
Log ended: 2014-06-20  16:46:33

Sekarang, bandingkan dengan output yang sebenarnya:

➜  ~  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
(Membaca basis data ... 252472 file dan direktori yang saat ini diinstal.)
Menghapus xdotool (1: 3.20130111.1-3.1) ...
Memproses pemicu untuk man-db (2.6.7.1-1) ...

Ini menyelamatkan saya beberapa baris yang tidak relevan dalam banyak kasus, dan itu tidak otomatis. Jadi, Anda tidak memerlukan perintah tambahan untuk melakukan apa yang ingin Anda lakukan, apt-get melakukannya untuk Anda.


8
2018-06-20 20:50





mencoba tee perintah. Anda dapat ditemukan sini beberapa contoh.

Penggunaan sederhana:

  <command> | tee file

contoh:

  sudo apt-get install whatYouWant | tee outputFile

1
2018-06-19 13:15