Saya memiliki skrip berjalan jangka panjang dan saya lupa untuk mengarahkan ulang outputnya ke file. Saya dapat melihatnya di terminal, tetapi dapatkah saya menyimpannya di file?
Saya tidak meminta tee
, redirection output (misalnya >
, >>
) dll - perintah telah dimulai, dan saya tidak dapat menjalankannya lagi. Saya perlu menyimpan output yang sudah dihasilkan. Jika saya bisa melihatnya di layar saya, ini disimpan / disimpan dalam cache / buffered. Dimana?
screendump
, /dev/vcsX
dan seterusnya memungkinkan saya untuk hanya menyimpan layar terakhir pada output terminal (bukan saat ini! - terminal bergulir tidak membantu).
Ini ada di konsol virtual Linux, bukan emulator terminal X11 seperti gnome-terminal
dengan mouse dan barang lainnya.
/dev/
, kan? Kalau tidak, Anda sudah menulis bagaimana mencapainya.Jawaban:
/dev/vcs[a]<n>
hanya akan memberi Anda layar penuh-penuh bahkan jika Anda telah menggulir ke atas, tetapi pilihanioctl()
seperti yang digunakan olehgpm
akan memungkinkan Anda untuk membuang layar yang saat ini ditampilkan bahkan ketika Anda sudah menggulir ke atas.Jadi bisa Anda lakukan:
Sesuaikan 80 dan 25 dengan lebar dan tinggi layar Anda yang sebenarnya.
Ini
sleep 3
memberi Anda waktu untuk menggulir ke atas (dengan Shift+PageUP) ke layar aktual yang ingin Anda buang.cat > file
mengarahkan ulang pasta kefile
. Akhiri dengan Ctrl+D.Lihat
console_ioctl(4)
detailnya.Jika Anda telah
gpm
menginstal dan menjalankan, Anda dapat melakukan pemilihan dengan mouse.Scrollback dan seleksi konsol virtual Linux sangat terbatas dan cukup menjengkelkan (karena ketika Anda mengganti konsol, Anda kehilangan seluruh scrollback). Ke depan, saya sarankan Anda menggunakan hal-hal seperti GNU
screen
atautmux
di dalamnya (Saya pribadi menggunakannya di terminal yang bahkan lebih mampu). Dengan mereka, Anda dapat memiliki scrollback yang lebih besar yang dapat dicari dan dengan mudah membuangnya ke file (dan bahkan mencatat semua output terminal, ditambah semua barang lain yang datang dengan multiplexer terminal tersebut).Seperti untuk mengotomatisasi proses untuk membuang seluruh buffer scrollback, itu harus dimungkinkan dalam beberapa kondisi, tetapi cukup sulit karena API sangat terbatas. Ada yang tidak berdokumen
ioctl
(TIOCLINUX, subcode = 13) untuk menggulir konsol virtual saat ini dengan beberapa offset (negatif untuk menggulir ke atas, positif untuk menggulir ke bawah).Namun tidak ada cara (yang saya tahu) untuk mengetahui ukuran saat ini dari buffer scrollback. Jadi sulit untuk mengetahui kapan Anda telah mencapai bagian atas buffer itu. Jika Anda mencoba menggulir melewatinya, layar tidak akan bergeser sebanyak dan tidak ada cara yang dapat diandalkan untuk mengetahui seberapa banyak layar sebenarnya telah digulir.
Saya juga menemukan perilaku bergulir ioctl tidak menentu (setidaknya dengan konsol VGA), di mana bergulir dengan kurang dari 4 baris hanya bekerja sesekali.
Skrip di bawah ini tampaknya berfungsi untuk saya pada konsol penyangga bingkai (dan kadang-kadang pada yang VGA) asalkan penyangga scrollback tidak mengandung urutan garis identik yang lebih panjang dari satu layar plus satu baris.
Ini cukup lambat karena menggulirkan satu baris pada satu waktu, dan perlu menunggu 10 ms untuk bukti ketika membaca setiap layar dump.
Untuk digunakan sebagai
that-script > file
dari dalam konsol virtual.sumber
https://github.com/jerome-pouiller/reredirect/ mungkin menjadi pilihan?
Deskripsi:
Sintaksnya adalah sebagai berikut:
sumber