Bir terminal ekranını gerçek anlamda temizleme


382

clearTerminaldeki komutu kullanmak kullanıcıyı yalnızca ekranın temizlendiğini düşünmeye kandırır ... fareyi kullanarak kaydırdığınızda önceki komutların çıktısını görebilirsiniz. Bu, bir tsunami metninde boğulduğunda hayatı zorlaştırır.

İnternette bulunabilen çeşitli çözümler (kaçış kodu vb.) Sadece clear komutunun zaten yaptığı değişikliklerdir.

Peki Linux'taki bir terminalin içeriğini nasıl temizlersiniz?


44
Bunu "programcılar tarafından sıkça kullanılan yazılım araçları" olarak sınıflandırırım (SSS bölümünde geçerli olarak belirtilir).
Autodidact

5
Gerçekten sorduğunuz şey "Terminalin geri kaydırma arabelleğini nasıl temizleyebilirim?" kabuktan (Bash) veya Ubuntu'dan bağımsızdır.
sonraki duyuruya kadar duraklatıldı.

@ spiderplant0 muhtemelen AskUbuntu bunun için doğru yer - şu anda. Bu sorulduğunda mevcut değildi, bu yüzden durum böyle olmasa bile konu dışı olarak kapandı.
jcollum

1
@Dennis'in belirttiği gibi bu sadece Ubuntu veya bash'ı değil, daha genel bir soru. "Gerçek için Ubuntu bash ekranını temizle" konusunu değiştirirdim -> "Gerçek için bir terminal ekranını temizle"
Ra_

Bash'i çalıştırabileceğiniz birçok farklı terminal tipi vardır (" bash terminali " terimi anlamsızdır). "Temizleme" hepsi için geçerli değildir - bazen en yakın yaklaşım, kağıdı ve bölmeyi / parçalamayı / yakmayı / istemediğiniz biti parçalamaktır.
Toby Speight

Yanıtlar:


500

Yalnızca yeni satırlar eklemek yerine net bir ekran yapmak için aşağıdaki komutu kullanın ...

printf "\033c"

evet bu bash isteminde bir 'printf'.

Muhtemelen bir takma ad tanımlamak isteyeceksiniz ...

alias cls='printf "\033c"'

açıklama

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

Böylece <ESC>cterminal sıfırlamak için VT100 kaçış kodu bu olur . İşte terminali kaçış kodları hakkında birtakım bilgiler verilmiştir.

Düzenle

İşte bunu yapmanın birkaç yolu ...

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

Yukarıdakiler KDE konsolunda (Konsole olarak adlandırılır) çalışmıyor, ancak umut var! Ekranı ve geri kaydırma arabelleğini temizlemek için aşağıdaki komut dizisini kullanın ...

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

Veya KDE'de aşağıdaki takma adı kullanın ...

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

Buradan geri kaydırma komutunu aldım .


4
Bu aslında terminale özgüdür. "\033c"bir ESC c"Tam Reset (RIS)" VT-XXX çıkış sırası. İnsanların bu günlerde kullandıkları neredeyse tüm terminaller VT uyumludur, ancak kendinizi garip bir terminal kullanarak bulursanız, bu işe yaramayabilir. @ vpit3833'ün cevabının TERM'nin doğru ayarlandığı varsayılarak daha olasıdır.
Laurence Gonsalves

2
printfbir Bash yerleşkesi (ayrı bir ikili olduğu doğrudur, ancak yerleşimlerin önceliği vardır ve çoğu modern mermi vardır printf).
sonraki duyuruya kadar duraklatıldı.

2
@ SDX2000 Tamam ... Ubuntu'yu belirttiğinizi biliyorum ve bunların tüm "modern" terminal emülatörlerinde benzer davranacağını varsaydım. Başlangıçta MAC terminalim üzerinde test ettim ve orada sıfırlanmadı, ancak Centos Linux'umda sıfırlandı.
Mart'ta nhed

12
echo -en "\ 033c"
Jonathon Reinhart

2
Birkaç yıl sonra 0,02 dolar, ama CU'da öğrenciyim. İşletim sistemleri profesörüme sordu ve bunun ANSI kaçış dizisine bir örnek olduğunu söyledi: en.wikipedia.org/wiki/ANSI_escape_code Bu bant içi sinyalizasyonun bir örneğidir.
abgordon

216

Deneyin reset. Terminal ekranını temizler, ancak önceki komutlara ok veya hangi tuş bağlantınız varsa erişilebilir.


3
Teşekkürler! Ancak istem dahil her şeyi temizler. Bunu yapmayan bir çözüm için cevabımı görün.
Autodidact

5
@ SDX2000 Her ikisi de istemi temizler ve sonra kabuk yeni bir tane oluşturur. Sıfırlamanın bir dezavantajı, biraz daha yavaş görünmesidir (muhtemelen ESC c yaymaktan daha fazlasını yaptığı için), ancak daha taşınabilirdir.
Laurence Gonsalves

@ Açıklık için teşekkürler ... Sıfırlamayı denedim ama istemin diğer her şeyle birlikte temizlendiğini varsaydığım kadar yavaştı. ESC cMuhtemelen Ubuntu'nun kullandığı dışında herhangi bir terminal kullanmayacağım için kullanmayı tercih edeceğim. Gerçi resetben vb seri bağlantı noktası üzerinden uzaktaki makineyi ayıklama am zaman kullanışlı birgün gelebilir
autodidact

1
@ SDX2000 sıfırlama, bir şeyi öldürdüğünüz (veya ikili bir dosyayı kullandığınız) ve teriminizi karışık bir durumda bıraktığınız için terminalinizin kötü bir şekilde karıştırıldığı durumlar için de kullanışlıdır. Hiç isteminizin göründüğü, ancak yazdığınızın olmadığı bir duruma geçtiniz ve vurduğunuzda yeni istemi altından değil, önceki istemin yanında gösteriliyor mu? sıfırlama bunu düzeltir. Aslında bu benim için şimdiye kadar kullandığım tek şey ... Geri kaydırma arabelleğimi temizlemek için hiç bir ihtiyaç / arzum olmadı.
Laurence Gonsalves

4
İle ilişkili bir saniyelik gecikme resetbenim için dayanılmaz.
Jonathon Reinhart


7

Okuduğum cevapların hiçbiri PuTTY'de işe yaramadı, bu yüzden bu yazı hakkında bir yorum buldum :

Bağlantınızın ayarlarında, "Pencere-> Davranış" altında "Sistem Menüsü yalnızca ALT'da görünüyor" ayarını bulacaksınız. Ardından CTRL + L, ALT, l (bu küçük harf L'dir) ekranı kaydırır ve sonra geri kaydırma arabelleğini temizler.

(bir Ubuntu sunucusuna bağlandığım için OP ile alakalı, ancak sunucunuzun çalışması ne olursa olsun görünüşte alakalı.)


@Dennis Williamson'ın 3 yaşındaki yorumu beni bu cevaba götürdü.
TecBrat

Ayrıca PuTTY "Pencere" ayarlarında size "konulu ALT-Uzay Sistem menüsü görünür" hızla yapabileceği aktive olduğu göz önüne alındığında CTRL+Lsonra ALT+Space, Uterminal penceresi sonra gerçek scrollback sıfırlar ilk temizler.
Pierre Voisin

6

Aşağıdaki bağlantı, bu takma adı nasıl kalıcı hale getireceğinizi açıklayacak, böylece yazmaya devam etmek zorunda kalmayacaksınız.

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

Bunlar, bu bağlantıda ayrıntılı olarak açıklanan adımlardır.

  1. vim ~ / .bashrc veya gedit ~ / .bashrc veya istediğiniz metin düzenleyicisi
  2. takma ad cls = 'printf "\ 033c"' dosyanın altına
  3. kaydet ve çık
  4. . ~ / .bashrc (ve evet. ile ~ arasında bir boşluk olmalıdır)
  5. Şimdi her şeyin işe yarayıp yaramadığını kontrol edin!

Ben sadece bu bilgi geçmeden bu bilgi için hiçbir kredi almak.



4

Bunun için en sevdiğim insan dostu komut:

reset

Xterm ve VT100 üzerinde test edilmiştir. Ayrıca, anormal bir program sonlandırıldıktan sonra da yardımcı olur. Komut arabelleğini tutar, böylece yukarı ok önceki komutlar arasında geçiş yapar.

alkış: D


3

Yeni hatların baskısını kullanan çözümün çok fazla desteklenmediğini biliyorum, ancak her şey başarısız olursa neden olmasın? Özellikle birinin ekranı görebilmesinin, ancak başkalarının keylog yapamayacağı bir ortamda çalıştığı durumlarda. O zaman potansiyel bir çözüm, aşağıdaki takma addır:

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

Ardından, ekranın mevcut içeriğini "temizlemek" (veya daha doğrusu, gizlemek) c+Enteriçin, terminalde yazmanız yeterlidir.


2

Sadece bu tmuxkaydırma tampon eklemek için clear, resetveya ile temizlenmez printf. Gerek :clear-history. Bkz. Bağlantı .


-2
echo -e "\e[3J"

Bu Linux Makinelerinde çalışır


5
Cevabınız için teşekkür etmemize rağmen, diğer cevapların üzerine ek değer katması daha iyi olurdu. Bu durumda, başka bir kullanıcı bu çözümü zaten gönderdiğinden cevabınız ek değer sağlamaz. Önceki bir yanıt size yardımcı olduysa, aynı bilgileri tekrarlamak yerine oy vermeniz gerekir.
Toby Speight

-53

Bu uygulamayı derleyin.

#include <iostream>
#include <cstring>

int main()
{
  char str[1000];
  memset(str, '\n', 999);
  str[999] = 0;
  std::cout << str << std::endl;
  return 0;
}

33
Üzgünüm, ama bu en iyi çözüm değil. 999 satırsonunu
eğmekten

2
Aslında bunun bir değeri var. Bazı terminallerde, ekranı diğer yöntemlerle temizlemek geçmişi öldürecek ve geri gitmenize izin vermeyecektir ... 999 satırla parmağım yorulacaktı. Zavallı adam.
JoshuaDavid

Sorunun bütün mesele bu OP vermedi oldu @JoshuaDavid değil açıklıkta sonra geri kaydırma isterler.
Socowi

@Socowi Benim yorum OP-değil bu kötü puan 50 cevap ele oldu. Ama sen haklısın!
JoshuaDavid
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.