Bagaimana cara menampilkan output baris perintah pada konsol dan menyimpan output ke file teks?


25

Bagaimana saya bisa berjalan sudo apt-get installdengan KEDUA melihat proses instalasi (lama dalam kasus saya) dan menyimpan hasilnya ke file teks?


Apakah ini apt-getbenar?
Braiam

@Braiam Saya pikir solusi yang saya terima dapat diterapkan ke semua perintah lain, menurut Anda begitu?

Jawaban:


17

gunakan scriptperintah. Ini akan menyalin semua yang masuk ke layar dalam file

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

scriptmengirimkan output perintah ke file, tetapi tidak menunjukkannya di layar.
Aaron

2
@ BryceAtNetwork23. Apakah Anda mencoba perintahnya? Script tidak mengirim output ke layar.
exore

1
Aku melakukannya. Saya berlari script -c "history" ~/hist.txtdan melihat output menunjukkan Script starteddan Script done, tetapi saya tidak melihat output dari perintah aktual di layar.
Aaron

10
@ BryceAtNetwork23 historyadalah 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.
exore

1
scriptjuga bisa dijalankan secara interaktif. Cukup ketik scriptpada prompt perintah. Anda akan mendapatkan shell baru, dan perintah apa pun yang Anda ketik akan menyimpan hasilnya. Ketik exituntuk mengakhiri shell dan menyimpan file. Secara default, output dipanggil typescriptdan akan berisi semua yang ditampilkan di layar Anda, apakah Anda mengetiknya, atau itu adalah output dari sebuah perintah. The historyperintah masih harus tersedia di shell baru juga.
Brian Minton

52

Anda dapat menggunakan teeperintah 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>&1perlu untuk mengarahkan STDERR ke STDOUT untuk menangkap kesalahan. Lihat pertanyaan StackOverflow ini untuk penjelasan yang baik tentang apa yang 2>&1sebenarnya dilakukan.


Saya akan menambahkan "2> & 1" sebelum "|"
Olivier Dulac

2
Ini lebih praktis daripada scriptkarena perintahnya tidak perlu dikutip. Jadi keuntungan seperti penyelesaian bash lebih mudah untuk dicapai.
Dan

2
@Dan: skrip tidak perlu -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)
Olivier Dulac

2
@Dan + bekerja dengan fungsi, alias, bawaan dan bahkan grup perintah dan subkulit. Ini harus menjadi jawaban yang diterima IMO.
Darkhogg

1
Anda bisa menggunakannya |&sebagai ganti 2>&1 |di bash
jfs

15

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

Atau, karena bash mendukung |&operator , sudo apt-get install your_software |& tee log_file.txtakan menyalurkan stdout dan stderr ke tee. (Kudos kepada JF Sebastian yang menyarankan ini di tempat lain .)
Eliah Kagan

9

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.


1

coba perintah tee . Anda dapat menemukan beberapa contoh di sini .

Penggunaan sederhana:

  <command> | tee file

contoh:

  sudo apt-get install whatYouWant | tee outputFile
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.