Menyalin buffer scrollback layar GNU ke file (hardcopy yang diperluas)

188

Bagaimana cara saya dengan mudah menyalin buffer scrollback Layar GNU ke file? Yaitu, versi yang lebih kuat dari perintah 'hardcopy'?

Di layar GNU, saya bisa menggunakan " Ctrl+ A Esc" untuk masuk ke buffer scrollback. Saya kemudian dapat menandai seluruh buffer dan menggunakan " Ctrl+ A Ctrl+ ]" untuk menempelkannya ke buffer Emacs , sehingga menyimpannya ke file.

Namun, ini membosankan. Apakah ada perintah Layar yang hanya akan menyalin buffer scrollback ke file, seperti 'hardcopy' lakukan untuk bagian layar yang terlihat?

Peter Mortensen
sumber

Jawaban:

284

Untuk menulis seluruh isi buffer scrollback ke file, ketik

Ctrl+ Adan : untuk masuk ke mode perintah, lalu

hardcopy -h <filename>

Dalam versi yang lebih lama screen, jika Anda melakukannya hardcopy -h, itu hanya menulis ke file -h. Ini diperbaiki dalam versi 4.2.0, jadi hardcopy -hmenulis ke hardcopy.Nmana Nnomor jendela saat ini.

Tagihan
sumber
1
Perhatikan bahwa file tersebut disimpan di direktori home - setidaknya itu untuk saya. Terima kasih atas jawabannya, btw!
Ritesh
2
@allrite: Ini akan disimpan dalam $ PWD (jika Anda tidak memberikan jalan penuh), tidak ada perilaku khusus.
Pushpendre
9
Ya, tetapi disimpan di $ PWD tempat Anda memulai layar. Tidak di $ PWD sesi layar.
seumasmac
7
Perhatikan bahwa jika Anda memiliki buffer scrollback yang panjang dan tidak banyak di dalamnya, file yang disimpan mungkin tampak kosong karena puluhan atau ratusan baris pertama kosong dan kontennya ada di akhir.
Terry Brown
3
Satu catatan lebih lanjut tentang lokasi penyimpanan hardcopy: Jika Anda melakukan cd ke direktori dan kemudian gunakan screen -runtuk menyambung kembali ke sesi yang ada, hardcopy tidak akan disimpan ke direktori aktif di dalam layar atau di mana Anda berada sebelum menggunakan screen -r. Saya pikir itu akan disimpan ke direktori di mana Anda pertama kali memulai sesi layar. Anda mungkin dapat mengubah ini dengan perintah hardcopydir .
Matthias Fripp
25

Tekan Ctrl+ A : bufferfile /tmp/somefile.txt ENTER , lalu Ctrl+A >

Ini akan menulis isi buffer saat ini ke file yang disebutkan.

Roshan
sumber
Saya mencoba ini, dan "ctrl-a" "mengatakan" Tidak ada yang terjadi ". Langkah pertama mengatakan "Bufferfile sekarang '/tmp/foo.txt'", tetapi tampaknya tidak membuat file itu.
1
Apakah Anda yakin telah menyalin sesuatu ke buffer layar menggunakan Ctrl + A [? Kedengarannya seperti buffer Anda mungkin kosong - itu tidak akan menyalin seluruh buffer scrollback, hanya bagian yang Anda pilih menggunakan Ctrl + A [
Roshan
2
Ah, saya sedang mencari jalan pintas untuk menyalin seluruh buffer tanpa menggunakan ctrl-a [
12

TL; DR: ^A:writebuf <filename>

OP tampaknya menginginkan cara untuk menggunakan bagian buffer yang dipilih yang Anda dapatkan ketika melakukan ^ A [, memilih teks menggunakan spasi sebagai awal dan akhir, dan alih-alih menggunakan ^ A] untuk menempel, simpan bagian yang dihasilkan yang dihasilkan dari buffer ke file.

Ini berhasil:

^A:writebuf <filename>

Catatan: satu 'f' dalam writebuf

Kevin Mullet
sumber
1
Tidak tidak. OP ingin menyimpan SELURUH buffer, bukan hanya bagian yang dipilih. - OP
2
Tikus! Kehilangan sebanyak ini
Kevin Mullet
4
Posting ini masih bermanfaat. Kerja bagus.
Justin E
1
Saya menemukan bahwa untuk membuat ini berfungsi pada layar versi MacOSX saya harus menggunakan jalur abolute (yaitu: / Pengguna / pengguna1 /path / ke / file.txt)
jhrf
6

Coba hardcopy -hsertakan seluruh buffer.

Jorge Gutierrez
sumber
2
Ini hanya membuat hardcopy dalam file ~ / -h
2
@barrycarter: Itu mungkin telah berubah di versi yang lebih baru. Pada layar 4.03.01, hardcopy -hmenulis ke hardcopy.N, di mana Nnomor jendela saat ini.
Keith Thompson
4

Ini bekerja untuk saya:

Masuk ke mode edit ( ~) dan ketik:

:hardcopy -h buff_file

Itu menciptakan file besar, yang 98% kosong, tetapi log saya sepenuhnya hadir di sisa 2%.

freeninza
sumber
-2

Ctrl+ A,, :dan terbitkan perintah 'log on'.

Atau mengaturnya sebagai default dalam Anda screenrc file sebagai 'deflog pada'.

brianray
sumber
2
Saya pikir ini baru saja mulai mencatat semuanya setelah saya menjalankan perintah itu. Saya tidak ingin mencatat semuanya (terlalu bertele-tele). Saya hanya ingin menangkap buffer scrollback sebagai file.
-3

Do Ctrl+ A, H.

Itu menyimpan layar saat ini menjadi file hard copy, misalnya, hardcopy.0 untuk layar 0. Tampaknya menjadi cara yang lebih cepat daripada menjadi Ctrl+ A, :dan mengetik perintah hardcopy .

Jeff
sumber
3
Sayangnya, itu hanya menyimpan bagian layar YANG TAMPAK, bukan buffer scrollback.