Perintah apa yang dapat saya gunakan untuk mengatur ulang dan menghapus terminal saya?

64

Saya telah menggunakan perintah:

reset

untuk menghapus terminal saya. Meskipun saya cukup yakin ini bukan yang seharusnya saya lakukan. Reset, seperti namanya, mengatur ulang seluruh terminal Anda (mengubah banyak hal). Inilah yang saya inginkan:

Saya pada dasarnya ingin menggunakan perintah clear. Namun, jika Anda menghapus lalu menggulir ke atas, Anda masih mendapatkan banyak barang dari sebelumnya. Secara umum ini bukan masalah, tapi saya melihat log kotor yang panjang dan saya ingin memastikan bahwa saya hanya melihat yang terbaru. Saya tahu bahwa saya bisa menggunakan moreatau sesuatu seperti itu tetapi saya lebih suka pendekatan ini.

sixtyfootersdude
sumber
tampaknya ada banyak kebingungan tentang apa yang sebenarnya ditanyakan di sini. dapatkah Anda mengklarifikasi pertanyaan sama sekali? apa sebenarnya yang ingin Anda capai, membersihkan buffer terminal scrollback Anda? (jika demikian, aplikasi terminal apa yang Anda gunakan?)
quack quixote
1
Ctrl-L akan menghapus layar dalam bash (dalam mode emacs, yang merupakan default), mirip dengan menjalankan program yang jelas.
Baru saja menguji ini di terminal bash di IntelliJ IDE. Bekerja dengan baik dan menghapus scrollback yang persis seperti yang saya inginkan. Terima kasih.
Ian Lewis
Saya tahu ini sudah dijawab sampai mati, tetapi saya pikir yang Anda inginkan adalah clear && printf '\033[3J'. Tidak ada pengaturan ulang terminal, hanya menghapus teks di layar. Lihat posting ini: superuser.com/questions/555554/…
jwd

Jawaban:

57

Buffer scrollback bukan fitur bash tetapi dari program terminal. Anda tidak mengatakan terminal apa yang Anda gunakan.

Jika Anda menggunakan xterm, Anda mungkin dapat menghapus jalur yang disimpan dengan menggema ESC-c ke terminal.

Ini mungkin atau mungkin tidak bekerja pada program terminal apa pun yang Anda gunakan.

Di linux ini mungkin akan berfungsi:

echo -e '\0033\0143'

pada gema FreeBSD tidak menerima -e sehingga Anda dapat mencoba:

printf '\033\143'
Craig
sumber
Saya menggunakan xterm. Namun saya tidak mengerti apa yang Anda maksud. Haruskah saya mengetik secara literal echo ESC-c?
sixtyfootersdude
2
@sixtyfootersdude: Tidak, tidak secara literal ESC. Baca artikel "Escape karakter" dan "Kontrol karakter" di Wikipedia - ESCsering digunakan untuk menunjukkan karakter ASCII 0x1B, yang dapat Anda masukkan dengan menekan ^Vdiikuti oleh Esc.
grawity
1
Anda seharusnya tidak. Jika solusi Anda melibatkan penulisan urutan escape terminal mentah, Anda harus memikirkan kembali solusinya. Saya akan menggunakan "lebih sedikit" daripada kucing. Jika Anda benar-benar ingin belajar tentang "urutan pelarian terminal" Google dapat membantu Anda.
Craig
2
@ HaraldNordgren lebih baik menggunakan printf yang lebih standar daripada echo -e.
Orang Baik
3
Kenapa \0143bukannya c?
ruakh
51

Gunakan alat yang tepat untuk setiap pekerjaan:

  • Gunakan clearuntuk menghapus jendela terminal.

  • Gunakan resetuntuk mengatur ulang terminal Anda ketika itu kacau oleh urutan kontrol.

  • Gunakan cathanya ketika Anda ingin melakukan streaming seluruh data dari satu tempat ke tempat lain tanpa gangguan .

  • Gunakan program pager seperti lessatau mostuntuk melihat halaman output.

  • Gunakan tail -f /var/log/foo.log /var/log/bar.loguntuk menonton beberapa file log yang berbeda.

    • Dengan GNU tail, -Fopsi lebih baik karena dapat terus mengikuti file bahkan ketika file baru muncul di tempatnya, seperti yang umum untuk file log.
hidung besar
sumber
14
Ini tidak benar-benar menjawab pertanyaan saya.
sixtyfootersdude
7
Ya itu. Jangan cat file untuk membacanya, file kucing untuk menyatukannya. Gunakan kurang atau lebih untuk membaca file - maka Anda tidak memiliki masalah yang sama.
Rich Bradshaw
Carilah "penggunaan kucing yang tidak berguna"
galois
Banyak orang menentang penggunaan catuntuk membaca apa pun, tetapi untuk file kecil itu sebenarnya lebih masuk akal bagi catmereka daripada menggunakannya less. Setelah file telah dibuang ke terminal, Anda dapat melihat / gulir kembali ke file sesering yang Anda inginkan, daripada harus diberhentikan lesssebelum Anda melakukan hal lain.
GKFX
23

Hanya untuk memberikan jawaban teknis: resetmenginisialisasi ulang terminal, seolah-olah itu dibuka kembali dari awal. stty saneakan melakukan banyak fungsi yang sama (tanpa reset). Ini adalah hal yang sama dengan ^L(Ctrl + L) (irrc), dan tput clear. Meskipun apa yang dikatakan poster sebelumnya (@grawity), cleartidak menghasilkan banyak baris baru. Ini mengirimkan TERMreset seperti yang didefinisikan dalam terminfoatau termcap, bagi saya, menggunakan gnome-terminal(xterm) itu sama dengan perintah perl -e'print "\33[H\33[2J"'.

Jika Anda hanya ingin menghapus buffer - dibandingkan dengan mengatur ulang seluruh terminal, coba ini tput reset. Itu harus sangat cepat, dan lakukan apa yang Anda inginkan. (Meskipun Anda benar-benar harus membaca file dengan less)

tput reset, mengirim nilai terminfo untuk reset - di terminal saya (xterm) sama dengan perl -e'print "\33c"'

Evan Carroll
sumber
1
Saya tidak mengatakan clearmenghasilkan banyak baris baru. Saya hanya memberikan perintah sebagai alternatif untuk itu, karena clearhanya membersihkan layar tetapi bukan buffer scrollback. (Tidak dalam Putty atau Konsole, setidaknya.)
grawity
1
Untuk alasan itu, mencetak banyak baris baru sebenarnya bukan alternatif untuk dihapus - Anda tidak tahu apa yang akan dilakukan terminal dengan sinyal yang jelas. Lebih baik memberi tahu orang baru bahwa Anda memiliki database yang tahu cara menangani terminal Anda, ia memiliki dua nilai kunci yang memetakan clearsebagai nama sinyal ke sinyal, dan satu yang memetakan resetke sinyal - dan hanya yang terakhir menghasilkan buffer gulir kembali dibersihkan. resetmengirimkan yang terakhir, di atas melakukan hal-hal menyenangkan lainnya.
Evan Carroll
1
Menurut pertanyaan awal sixtyfootersdude ini, cleartidak tidak ulang scrollback nya. ( ESC cbekerja di xtermdan berbasis VTE, tetapi tidak di Putty dan Konsole.) Dia juga tidak ingin menggunakan reset, karena itu me-reset lebih dari yang dia inginkan. (Saya tidak tahu terminal mana yang dia gunakan - tetapi bandingkan sttysebelum dan sesudah mengatur ulang.)
grawity
2
seperti yang saya katakan, dia mungkin ingin tput reset, yang mengirim sinyal reset ke terminal - tanpa benar-benar menginisialisasi ulang istilah tersebut. "reset - Alih-alih mengeluarkan string inisialisasi, string reset terminal akan menjadi output jika ada (rs1, rs2, rs3, rf). Jika string reset tidak ada, tetapi string inisialisasi ada, string inisialisasi akan menjadi output. Jika tidak, setel ulang tindakan secara identik ke init. " Di sini, kami telah mengatur ulang string sehingga string init tidak berjalan.
Evan Carroll
+1: untuk saran, namun tput resetsangat lambat (sama seperti reset). printf '\033\143'jauh lebih cepat. Apakah ada alasan mengapa metode printf berbahaya / buruk?
sixtyfootersdude
9

Terminal lain adalah iTerm2, dan itu punya urutan pelarian yang agak aneh yang digunakan untuk menghapus scrollback. Di shell Bash, saya menggunakan sesuatu seperti:

echo -ne '\033]50;ClearScrollback\a'

dalam naskah. Jadi pada dasarnya ini adalah karakter ESC, diikuti oleh " ]50;ClearScrollback" dan kemudian karakter BEL.

Sam Mason
sumber
1
CMD + K bekerja di iTerm2. CTRL + K bekerja di banyak yang lain.
blockloop
Saya suka solusi ini karena saya akan menghapus buffer scrollback iTerm2 dari skrip shell, ketika hal-hal suka cleardan resettidak mau. Namun, ini bukan jawaban terbaik untuk pertanyaan itu. Saya pikir jawaban yang tepat untuk kasus itu adalah apa pun yang ditawarkan aplikasi terminal, seperti command-K di iTerm2, control-K di yang lain, dll.
LS
8

Mungkin cara terbaik untuk membersihkan semuanya adalah dengan menggunakan fungsi terminal:

  • Konsole: Ctrl+ Shift+ KLihat → Hapus Scrollback dan Reset
  • Terminal GNOME: Edit → Reset dan Hapus
  • Putty: Ctrl+ right-click→ Hapus Scrollback

Dengan cara ini kedua buffer dihapus bersih, dan status terminal diatur ulang ke persis seperti apa saat startup (yang mungkin atau mungkin tidak sama dengan menggunakan reset).

grawity
sumber
Hmm, saya tidak punya itu di bawah gnome saya ...
sixtyfootersdude
@sixtyfootersdude: Aku yakin itu adalah di sana, saya tidak tahu menu yang tepat (tidak dapat menggunakan gnome-terminalsendiri pada saat ini) ... Lihatlah "Tools" dan menu lainnya.
grawity
Dalam xterm, tombol ctrl-tengah -> "setel ulang dan hapus garis yang disimpan"
Craig
3
kurang -W + F foo.log

+Fadalah untuk "ikuti", mirip dengan tail -ftetapi memungkinkan Anda menggulir kembali juga.

Semua terminal berbasis vte (GNOME, Xfce, Roxterm) dan KDE Konsole memungkinkan Anda menggunakan roda gulir untuk menggulir ke dalam less. Saya menemukan itu cukup nyaman.


Alternatif untuk clear:

perl -e 'print "\ n" x512;'

xterm -e 'tail -f foo.log'
grawity
sumber
3

Di Mac OS X Terminal.app:

Lihat -> Hapus Scrollback (atau command- K)

acajaja
sumber
@Rohit Jika pertanyaannya khusus tentang Mac OS X Terminal.app, maka, ya, ini adalah jawaban yang bagus. Namun, pertanyaan aslinya adalah ambigu, terbaik yang bisa saya katakan, sehubungan dengan terminal dan OS mana yang sedang bermain.
David J.
2

Ini bukan masalah "Bash". Itu tergantung pada terminal yang Anda gunakan. Sebagai contoh, saya menggunakan "iterm2" dengan macbook untuk menghubungkan mesin linux jarak jauh. Anda dapat menggunakan "perintah + K" untuk membersihkan buffer, atau di menu, pilih "Edit" -> "Clear Buffer".

Steven Huang
sumber
1

Untuk menghapus layar konsol dan buffer scrollback saat menjalankan Putty, ini berfungsi untuk saya:

echo -en "\ec\e[3J"

Ini sebenarnya 2 urutan "Esc" yang bertindak secara independen ... mereka dapat digunakan dalam urutan apa pun:

# clears the console screen, but not the scrollback buffer
# this is actually the escape code to "reset" the terminal
echo -en "\ec"

# clears the scrollback buffer, but not the console screen
# screen content remains, and cursor position remains at its last position
echo -en "\e[3J"

Menggunakan echo -en "\ec"yang mengatur ulang terminal mungkin mengubah beberapa pengaturan terminal Anda yang lain. Alih-alih "Setel Ulang", Anda bisa melakukan ini:

# position the cursor to "Home" (Top Row, First Column)
echo -en "\e[H"

# Erase down: clear the screen from the cursor down to the bottom of the screen.
echo -en "\e[J"

# Note: this is supposed to clear the screen and position the cursor to home,
# but it didn't work like that for me. It cleared the entire screen (above and 
# below the cursor), but left the cursor at its last position.
echo -en "\e[2J"

# putting everything together
echo -en "\e[H\e[J\e[3J"

Anda dapat menempatkan ini dalam skrip shell dan berfungsi dengan baik.


Dalam hal ada beberapa ketergantungan sistem:

Saya menggunakan Putty Connection Manager (Versi 0.7.1 BETA (build 136)), dengan Putty (Rilis 0.60).

Mengetik:

echo \"$TERM\"; /bin/sh --version

laporan:

"xterm"
GNU bash, version 4.1.2(1)-release-(x86_64-redhat-linux-gnu) ...
Kevin Fegan
sumber
1

Untuk membersihkan buffer layar untuk perangkat keras TTY di FreeBSD Anda dapat menggunakan "vidcontrol - konsol sistem kontrol dan utilitas konfigurasi" dengan parameter -C Bersihkan buffer sejarah.

vidcontrol -C

perintah akan mengosongkan semua penyangga layar untuk konsol saat ini, di atas apa yang Anda lihat saat ini. Anda mungkin ingin 'membersihkan' terlebih dahulu, atau tidak - terserah Anda.

pengguna
sumber
0

Jika Anda ingin memastikan Anda melihat entri terbaru dalam file log, mungkin lebih baik menggunakan tail daripada clear/ catyang saya anggap Anda gunakan.

Josh K.
sumber
Sebenarnya saya menggunakan tail -f (log kontinu) namun karena mereka kadang-kadang meludahkan ribuan baris, penting untuk memiliki scroll kembali. Namun alangkah baiknya mengetahui bahwa saya tidak cemberut kembali ke log yang lebih lama.
sixtyfootersdude
0

Hmmm. Saya kira jika Anda menjalankan konsole, Anda kurang beruntung. Dulu Anda hanya bisa "menghapus scrollback". Konsole tidak akan membiarkan Anda melakukan itu lagi. Anda harus mengatur ulang juga, sehingga membunuh semua program yang sedang Anda jalankan. Saya kira saya perlu program terminal baru ......

Bruce
sumber