Bersihkan layar terminal secara nyata

382

Menggunakan clearperintah pada terminal hanya membodohi pengguna dengan berpikir layar telah dihapus ... Anda masih dapat melihat output dari perintah sebelumnya ketika Anda menggulir menggunakan mouse. Ini membuat hidup jadi sulit ketika Anda tenggelam dalam tsunami teks.

Berbagai solusi (kode pelarian dll.) Yang dapat ditemukan di Internet hanyalah variasi dari apa yang sudah dilakukan perintah yang jelas.

Jadi bagaimana Anda menghapus konten terminal di Linux secara nyata?

Otodidak
sumber
44
Saya akan mengategorikan ini sebagai "alat perangkat lunak yang biasa digunakan oleh programmer" (disebutkan dalam FAQ sebagai valid).
Autodidact
5
Apa yang sebenarnya Anda tanyakan adalah "Bagaimana saya bisa menghapus buffer gulir-kembali terminal?" yang tidak tergantung pada shell (Bash) atau Ubuntu.
Dijeda sampai pemberitahuan lebih lanjut.
@ spiderplant0 mungkin karena AskUbuntu adalah tempat yang tepat untuk ini - saat ini. Tidak ada saat ini ditanya, jadi ditutup sebagai topik, meskipun bukan itu masalahnya.
jcollum
1
Itu pertanyaan yang lebih umum, tidak hanya memengaruhi Ubuntu atau bash, seperti yang dicatat oleh @Dennis. Saya akan mengubah topik "Bersihkan layar bash Ubuntu untuk nyata" -> "Bersihkan layar terminal untuk nyata"
Ra_
Ada banyak jenis terminal yang Anda gunakan untuk menjalankan Bash (istilah " terminal bash " tidak ada artinya). "Membersihkan" tidak berlaku untuk semuanya - kadang-kadang, perkiraan terdekat adalah merobek kertas dan bin / rusak / bakar / hancurkan bagian yang tidak Anda inginkan.
Toby Speight

Jawaban:

500

Gunakan perintah berikut untuk melakukan layar yang jernih alih-alih hanya menambahkan baris baru ...

printf "\033c"

ya itu 'printf' pada bash prompt.

Anda mungkin ingin mendefinisikan alias ...

alias cls='printf "\033c"'

Penjelasan

\033 == \x1B == 27 == ESC

Jadi ini menjadi <ESC>ckode pelarian VT100 untuk mengatur ulang terminal. Berikut ini beberapa informasi lebih lanjut tentang kode pelarian terminal.

Edit

Berikut adalah beberapa cara lain untuk melakukannya ...

printf "\ec" #\e is ESC in bash
echo -en "\ec" #thanks @Jonathon Reinhart.
# -e    Enable interpretation of of backslash escapes
# -n    Do not output a new line

KDE

Hal di atas tidak berfungsi pada konsol KDE (disebut Konsole) tetapi ada harapan! Gunakan urutan perintah berikut untuk menghapus layar dan buffer scroll-back ...

clear && echo -en "\e[3J"

Atau mungkin menggunakan alias berikut di KDE ...

alias cls='clear && echo -en "\e[3J"'

Saya mendapat perintah pembersihan scroll-back dari sini .

Otodidak
sumber
4
Ini sebenarnya terminal spesifik. "\033c"adalah ESC cyang merupakan urutan keluar VT-XXX untuk "Full Reset (RIS)". Hampir semua terminal yang digunakan orang akhir-akhir ini kompatibel dengan VT, tetapi jika Anda pernah menggunakan terminal aneh, ini mungkin tidak berfungsi. Jawaban @ vpit3833 lebih mungkin berfungsi dengan asumsi TERM diatur dengan benar.
Laurence Gonsalves
2
printfadalah Bash builtin (memang benar bahwa itu juga biner yang terpisah, tetapi builtin memiliki prioritas dan kebanyakan shell modern memiliki printf).
Dijeda sampai pemberitahuan lebih lanjut.
2
@ SDX2000 OK ... Saya tahu Anda menentukan Ubuntu, dan saya berasumsi bahwa ini akan berperilaku serupa pada semua emulator terminal "modern". Saya awalnya menguji pada terminal MAC saya dan tidak mereset di sana, tetapi itu reset pada Centos Linux saya.
nhed
12
echo -en "\ 033c"
Jonathon Reinhart
2
$ 0,02 beberapa tahun kemudian, tetapi saya seorang mahasiswa di CU. Tanya profesor sistem operasi saya dan dia mengatakan ini adalah contoh dari urutan pelarian ANSI: en.wikipedia.org/wiki/ANSI_escape_code Ini adalah contoh pensinyalan in-band.
abgordon
216

Coba reset. Ini membersihkan layar terminal tetapi perintah sebelumnya dapat diakses melalui panah atau tombol apa pun yang Anda miliki.

vpit3833
sumber
3
Terima kasih! Tapi itu membersihkan semua hal termasuk prompt. Lihat jawaban saya untuk solusi yang tidak melakukan ini.
Autodidact
5
@ SDX2000 Keduanya menghapus prompt, dan kemudian shell menghasilkan yang baru. Satu kelemahan untuk mengatur ulang adalah bahwa itu tampaknya sedikit lebih lambat (mungkin karena ia melakukan lebih dari sekedar memancarkan ESC c) tetapi lebih portabel.
Laurence Gonsalves
@Laurence terima kasih atas klarifikasi ... Saya mencoba mengatur ulang tetapi sangat lambat sehingga saya berasumsi bahwa prompt telah dihapus bersama dengan yang lainnya. Saya masih akan lebih suka menggunakan ESC ckarena saya mungkin tidak akan pernah menggunakan terminal apa pun selain yang digunakan Ubuntu. Meskipun resetmungkin berguna suatu hari nanti ketika saya men-debug mesin jarak jauh melalui port serial dll.
Autodidact
1
@ SDX2000 reset juga berguna untuk kasus-kasus di mana terminal Anda rusak parah karena Anda membunuh sesuatu (atau membuat file biner) dan meninggalkan istilah Anda dalam keadaan hancur. Pernah masuk ke keadaan di mana prompt Anda muncul tetapi tidak mengetik, dan ketika Anda menekan enter prompt baru muncul di sebelah prompt sebelumnya daripada di bawah itu? reset perbaikan itu. Itulah sebenarnya yang pernah saya gunakan untuk ... Saya tidak pernah memiliki kebutuhan / keinginan untuk menghapus buffer scroll-back saya.
Laurence Gonsalves
4
Keterlambatan satu detik yang terkait dengan resetitu tidak tertahankan bagi saya.
Jonathon Reinhart
62
tput reset

Itu akan melakukan trik!

Komunitas
sumber
2
Menjalankan jauh lebih cepat daripada biasa reset, tetapi masih melakukan pekerjaan!
Ponkadoodle
1
Lebih cepat dari sekadar reset
l2aelba
Ini tidak selalu memotongnya, tetapi jelas tidak
tput
7

Tidak ada jawaban yang saya baca yang berfungsi di Putty, jadi saya menemukan komentar pada artikel ini :

Dalam pengaturan untuk koneksi Anda, di bawah "Window-> Behavior" Anda akan menemukan pengaturan "System Menu Muncul di ALT saja". Kemudian CTRL + L, ALT, l (itu huruf kecil L) akan menggulir layar dan kemudian menghapus buffer scrollback.

(relevan dengan OP karena saya terhubung ke server Ubuntu, tetapi juga tampaknya relevan tidak peduli apa server Anda berjalan.)

TecBrat
sumber
Komentar 3 tahun dari @Dennis Williamson menuntun saya ke jawaban ini.
TecBrat
Juga, mengingat bahwa dalam pengaturan "Window" dari Putty Anda mengaktifkan "muncul menu System pada ALT-Space" Anda dapat dengan cepat melakukan CTRL+Litu ALT+Space, Uyang membersihkan pertama jendela terminal kemudian me-reset scrollback untuk nyata.
Pierre Voisin
6

Tautan berikut akan menjelaskan cara membuat alias itu permanen sehingga Anda tidak harus terus mengetiknya.

/ubuntu/17536/how-do-i-create-a-permanent-bash-alias

Ini adalah langkah-langkah rinci di tautan itu.

  1. vim ~ / .bashrc atau gedit ~ / .bashrc atau editor teks apa pun yang Anda suka
  2. letakkan alias cls = 'printf "\ 033c"' di bagian bawah file
  3. Simpan dan keluar
  4. . ~ / .bashrc (dan ya harus ada spasi di antara. dan ~)
  5. sekarang periksa untuk melihat apakah semuanya berfungsi!

Saya tidak mengambil kredit untuk informasi ini hanya meneruskannya.

N1mr0d
sumber
4

Dengan KDE dan Ubuntu 12.04 LTS dan terminal "Konsole", tidak ada jawaban yang diposting yang berfungsi. Namun, menekan pintasan keyboard default CTRL + Shift + X tidak berfungsi! Sumber:

https://bugs.kde.org/show_bug.cgi?id=288913

The111
sumber
3
Ini telah diubah menjadi CTRL + Shift + K di versi KDE yang lebih baru: bugs.kde.org/show_bug.cgi?id=282593
Coder Dioptimalkan
4

Perintah ramah manusia favorit saya untuk ini adalah:

reset

Diuji pada xterm dan VT100. Ini juga membantu setelah penghentian program yang tidak normal. Menyimpan buffer perintah, sehingga panah atas akan menggilir perintah sebelumnya.

sorakan: D

elbedoit
sumber
3

Saya tahu solusi menggunakan pencetakan jalur baru tidak banyak didukung, tetapi jika semuanya gagal, mengapa tidak? Terutama di mana seseorang beroperasi di lingkungan di mana orang lain mungkin dapat melihat layar, tetapi tidak dapat keylog. Salah satu solusi potensial, adalah alias berikut:

alias c="printf '\r\n%.0s' {1..50}"

Kemudian, untuk "menghapus" isi layar saat ini (atau lebih tepatnya, menyembunyikannya), cukup ketikkan c+Enterdi terminal.

nemesisfixx
sumber
2

Hanya untuk menambahkan bahwa tmuxbuffer gulir tidak jelas dengan clear, resetatau printf. Anda harus melakukannya :clear-history. Lihat tautan .

theaws.blog
sumber
-2
echo -e "\e[3J"

Ini bekerja di Mesin Linux

Nithin
sumber
5
Meskipun kami berterima kasih atas jawaban Anda, akan lebih baik jika memberikan nilai tambahan di atas jawaban lainnya. Dalam hal ini, jawaban Anda tidak memberikan nilai tambahan, karena pengguna lain sudah memposting solusi itu. Jika jawaban sebelumnya bermanfaat bagi Anda, Anda harus memilihnya alih-alih mengulangi informasi yang sama.
Toby Speight
-53

Kompilasi aplikasi ini.

#include <iostream>
#include <cstring>

int main()
{
  char str[1000];
  memset(str, '\n', 999);
  str[999] = 0;
  std::cout << str << std::endl;
  return 0;
}
Maks
sumber
33
Maaf, ini bukan solusi terbaik. Ada metode yang lebih baik daripada memuntahkan 999 baris baru
pbfy0
2
Sebenarnya ada beberapa nilai untuk ini. Di beberapa terminal, membersihkan layar dengan metode lain akan mematikan sejarah dan tidak memungkinkan Anda untuk menggulir kembali ... walaupun dengan 999 garis jari saya akan lelah. Pria malang.
JoshuaDavid
@ JoshuaDavid Inti dari pertanyaan adalah bahwa OP tidak ingin dapat menggulir kembali setelah kliring.
Socowi
@ Socowi Komentar saya membahas -50 jawaban buruk ini, bukan OP. Tapi kamu benar!
JoshuaDavid