Saat saya menggunakan clear
perintah untuk menghapus layar. Itu tidak dihapus (lihat tangkapan layar ketika saya menggulir sedikit ke atas setelah perintah selesai)
Jadi saya menggandakan perintah untuk mendapatkan perilaku yang benar:
$ clear && clear && DD=0 ...
Mengapa saya perlu menggandakan perintah untuk membersihkan layar?
UPD
Sebenarnya kalau saya clear
Saya mendapat layar yang dibersihkan. Tetapi saya dapat menggulir ke atas dan melihat 25 baris terakhir (jika layarnya 80 × 25). Ketika saya menjalankan clear;clear
Saya sudah menghapus garis itu.
Jawaban yang Diterima:
Hal penting yang perlu diperhatikan di sini adalah tag pada pertanyaan. Perilaku ini khusus untuk Terminal GNOME dan emulator terminal lainnya yang dibangun di atas libvte. Anda tidak akan melihat ini di Xterm, atau di Unicode RXVT, atau di emulator terminal yang ada di dalam kernel Linux, atau di konsol FreeBSD.
Apa yang terjadi secara umum adalah ini.
- Yang
clear
perintah melihat terminfo/termcap dan mengeluarkan urutan kontrol yang sesuai.- Jika entri terminfo/termcap memiliki
E3
kemampuan itu, pertama-tama menulis itu. Ini mengeluarkan urutan kontrol untuk menghapus buffer scrollback. Ini dan sejarah di baliknya didokumentasikan secara rinci di halaman manual Dickey ncurses untukclear
perintah. - Kemudian menggunakan
clear
kemampuan untuk menghapus layar yang terlihat.
- Jika entri terminfo/termcap memiliki
- Urutan kontrol dalam entri terminfo/termcap ditentukan oleh tipe terminal; tetapi, dengan pengecualian terminal (saat ini jarang terjadi) yang menggunakan FormFeed untuk membersihkan layar (yang tidak dilakukan oleh DEC VT dan penirunya), terminal tersebut hanyalah rangkaian kontrol ECMA-48 lama atau ekstensinya. Misalnya:
putty
entri mendefinisikanE3=E[3J
yang merupakan urutan kontrol ekstensi Xterm.pcvtxx
konsol NetBSD entri adalah salah satu dari banyak yang mendefinisikanclear=E[HE[J
.] atau sesuatu yang serupa. Ini adalah dua rangkaian kontrol ECMA-48 biasa.
- Emulator terminal bertindak berdasarkan urutan kontrol. Seperti yang didefinisikan oleh ECMA-48 dan ekstensi Xterm untuknya:
- CSI
H
(CUP) menampung kursor. - CSI
J
(ED 0) atau cukup CSIJ
menghapus dari posisi kursor saat ini ke akhir layar. - CSI
2
J
(ED 2) menghapus seluruh layar. - CSI
3
J
(ED 3) menghapus buffer scrollback.
- CSI
Khususnya mengenai Terminal GNOME:
- Tipe terminal adalah
gnome
, tetapi beberapa orang membiarkannya secara keliru disetel kexterm
. - Si
gnome
entri terminfo tidak mendefinisikanE3
kemampuan, dan pada banyak sistem — masih! — begitu juga denganxterm
entri karena ini belum meresap dari Dickey terminfo. Jadiclear
hanya menulis isiclear
kemampuan. - Isi dari
clear
Kemampuan untuk entri terminfo tersebut adalah urutan kontrol ke home kursor diikuti dengan menghapus seluruh layar. - Tetapi Terminal GNOME tidak menerapkan penghapusan seluruh layar dengan benar. Lebih khusus lagi, perpustakaan yang menjadi dasarnya, libvte, tidak melakukannya dalam kode
VteTerminalPrivate::seq_clear_screen()
-nya fungsi. Sebaliknya, libvte menggulir layar ke bawah sepanjang garis kosong di seluruh layar, dan memindahkan posisi kursor ke baris pertama dari baris kosong tersebut.
Inilah mengapa Anda melihat apa yang Anda lihat. libvte tidak menghapus seluruh layar saat disuruh. Melainkan melakukan sesuatu yang memiliki kemiripan yang dangkal dengan itu, sampai seseorang melakukan persis seperti yang dilakukan penanya di sini:gulir kembali jendela terminal untuk melihat buffer gulir kembali. Maka perbedaannya sangat mencolok.
Pada emulator terminal lain seperti Xterm dan Unicode RXVT, urutan kontrol ED 2 benar-benar menghapus layar, menghapus setiap posisi di layar pada tempatnya, dari atas ke bawah, dan tidak mengubah buffer scrollback. Tetapi pada emulator terminal libvte, itu hanya mendorong layar saat ini ke buffer scrollback dan menambahkan baris kosong senilai layar. Konten layar sebelumnya tidak dihapus tetapi digeser ke buffer scrollback.
Dan jika Anda menjalankan clear
perintah dua kali, ia menambahkan dua garis kosong senilai layar. Jika buffer scroll back Anda cukup besar, Anda dapat tetap temukan konten layar asli, cukup lebih jauh di buffer scrollback.
Bacaan lebih lanjut
- Fungsi Kontrol untuk Kumpulan Karakter Berkode . ECMA-48. 1976.
- Georgi Kirilov (2007-12-30). Ctrl-L menambahkan ruang kosong ke buffer scrollback . Bug GNOME #506438.
- Sejauh mana emulator terminal xterm, xterm-color, dan linux berbasis VT100?
- Menghapus buffer scrollback "lama"
- Bash clear command perilaku aneh menghapus buffer scrollback.
- https://superuser.com/questions/1094599/
- Thomas Dickey (2018). “Bug yang Dikenal di XTerm dan Serupa:Terminal GNOME“. Pertanyaan Umum XTerm . tak terlihat-island.net.
- Thomas Dickey (2018). “Bug yang Dikenal di XTerm dan Serupa:Catatan di VTE“. Pertanyaan Umum XTerm . tak terlihat-island.net.