Löschen Sie einen Terminalbildschirm für real

382

Verwendung der clear Befehls auf dem Terminal täuscht den Benutzer nur vor, dass der Bildschirm gelöscht wurde. Sie können immer noch die Ausgabe der vorherigen Befehle sehen, wenn Sie mit der Maus scrollen. Dies macht das Leben schwierig, wenn Sie in einem Tsunami von Text ertrinken.

Verschiedene Lösungen (Escape-Code usw.), die im Internet zu finden sind, sind nur Variationen dessen, was der Befehl clear bereits tut.

Wie löscht man den Inhalt eines Terminals unter Linux wirklich?

Autodidakt
quelle
44
Ich würde dies als "Software-Tools, die häufig von Programmierern verwendet werden" (in den FAQ als gültig erwähnt) kategorisieren.
Autodidact
5
Was Sie wirklich fragen, ist: "Wie kann ich den Scroll-Back-Puffer des Terminals löschen?" Das ist unabhängig von der Shell (Bash) oder Ubuntu.
Bis auf weiteres angehalten.
@ spiderplant0 wahrscheinlich, weil AskUbuntu der richtige Ort dafür ist - zu diesem Zeitpunkt. Existierte nicht, als dies gefragt wurde, daher wurde es als Off-Topic geschlossen, obwohl dies nicht der Fall ist.
JCollum
1
Das ist eine allgemeinere Frage, die nicht nur Ubuntu oder Bash betrifft, wie @Dennis bemerkte. Ich würde das Thema "Ubuntu-Bash-Bildschirm für echt
löschen
Es gibt viele verschiedene Terminaltypen, mit denen Sie Bash ausführen können (der Begriff " Bash-Terminal " ist bedeutungslos). "Löschen" gilt nicht für alle - manchmal besteht die nächste Annäherung darin, das Papier zu zerreißen und das nicht gewünschte Bit zu entsorgen / zu zerkleinern / zu verbrennen / zu zerstören.
Toby Speight

Antworten:

500

Verwenden Sie den folgenden Befehl, um einen übersichtlichen Bildschirm zu erstellen, anstatt nur neue Zeilen hinzuzufügen ...

printf "\033c"

Ja, das ist ein 'printf' an der Bash-Eingabeaufforderung.

Sie werden wahrscheinlich einen Alias ​​definieren wollen ...

alias cls='printf "\033c"'

Erläuterung

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

Dies <ESC>cist also der VT100-Escape-Code zum Zurücksetzen des Terminals. Hier finden Sie weitere Informationen zu Terminal-Escape-Codes.

Bearbeiten

Hier sind ein paar andere Möglichkeiten ...

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

Das Obige funktioniert nicht auf der KDE-Konsole (Konsole genannt), aber es gibt Hoffnung! Verwenden Sie die folgende Befehlsfolge, um den Bildschirm und den Bildlaufpuffer zu löschen ...

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

Oder verwenden Sie den folgenden Alias ​​für KDE ...

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

Ich habe von hier aus den Befehl zum Zurückblättern zum Zurückblättern erhalten .

Autodidakt
quelle
4
Dies ist tatsächlich terminalspezifisch. "\033c"ist ESC cdie für "Full Reset (RIS)" die VT-XXX - Escape - Sequenz ist. Fast alle Terminals, die heutzutage tatsächlich verwendet werden, sind VT-kompatibel. Wenn Sie jedoch jemals ein seltsames Terminal verwenden, funktioniert dies möglicherweise nicht. Die Antwort von @ vpit3833 funktioniert eher, wenn TERM richtig eingestellt ist.
Laurence Gonsalves
2
printfist ein Bash-Builtin (es ist wahr, dass es auch eine separate Binärdatei ist, aber Builtins haben Vorrang und die meisten modernen Shells haben Vorrang printf).
Bis auf weiteres angehalten.
2
@ SDX2000 OK ... Ich weiß, dass Sie Ubuntu angegeben haben, und ich nahm an, dass sich diese auf allen "modernen" Terminalemulatoren ähnlich verhalten würden. Ich habe anfangs auf dem MAC-Terminal getestet und es wurde dort nicht zurückgesetzt, aber es wurde auf meinem Centos Linux zurückgesetzt.
nhed
12
echo -en "\ 033c"
Jonathon Reinhart
2
Ein paar Jahre später $ 0,02, aber ich bin Student an der CU. Fragte mein Professor für Betriebssysteme und er sagte, dies sei ein Beispiel für eine ANSI-Escape-Sequenz: en.wikipedia.org/wiki/ANSI_escape_code Dies ist ein Beispiel für In-Band-Signalisierung.
Abbordon
216

Versuchen Sie es reset. Der Terminalbildschirm wird gelöscht, aber auf die vorherigen Befehle kann über einen Pfeil oder eine beliebige Tastenkombination zugegriffen werden.

vpit3833
quelle
3
Vielen Dank! Aber es löscht alles, einschließlich der Eingabeaufforderung. Siehe meine Antwort für eine Lösung, die dies nicht tut.
Autodidact
5
@ SDX2000 Beide löschen die Eingabeaufforderung und die Shell generiert eine neue. Der einzige Nachteil beim Zurücksetzen ist, dass es etwas langsamer zu sein scheint (wahrscheinlich, weil es mehr als nur ESC c emittiert), aber portabler ist.
Laurence Gonsalves
@Laurence danke für die Klarstellung ... Ich habe versucht, zurückzusetzen, aber es war so langsam, dass ich davon ausgegangen bin, dass die Eingabeaufforderung zusammen mit allem anderen gelöscht wurde. Ich werde es immer noch vorziehen, ESC cda ich wahrscheinlich nie ein anderes Terminal als das von Ubuntu verwenden werde. Obwohl resetes eines Tages nützlich sein kann, wenn ich einen Remote-Computer über die serielle Schnittstelle usw.
debugge
1
Das Zurücksetzen von @ SDX2000 ist auch praktisch in Fällen, in denen Ihr Terminal stark beschädigt wird, weil Sie etwas getötet (oder eine Binärdatei cattiert) haben und Ihr Begriff in einem beschädigten Zustand belassen wurde. Haben Sie jemals einen Zustand erreicht, in dem Ihre Eingabeaufforderung angezeigt wird, aber nicht Ihre Eingabe, und wenn Sie die Eingabetaste drücken, wird die neue Eingabeaufforderung neben der vorherigen Eingabeaufforderung und nicht darunter angezeigt? Zurücksetzen behebt das. Das ist eigentlich alles, wofür ich es jemals benutzt habe ... Ich hatte nie das Bedürfnis / den Wunsch, meinen Scroll-Back-Puffer zu löschen.
Laurence Gonsalves
4
Die damit verbundene Verzögerung von einer Sekunde resetist für mich unerträglich.
Jonathon Reinhart
62
tput reset

Das wird den Trick machen!

Gemeinschaft
quelle
2
Wird viel schneller als normal ausgeführt reset, erledigt aber trotzdem den Job!
Ponkadoodle
1
Schneller als nur reset
l2aelba
Dies hat es nicht immer gekürzt, aber tput clear hat es getan
InterLinked
7

Keine der Antworten, die ich gelesen habe, hat in PuTTY funktioniert, daher habe ich einen Kommentar zu diesem Artikel gefunden :

In den Einstellungen für Ihre Verbindung finden Sie unter "Fenster-> Verhalten" eine Einstellung "Systemmenü wird nur bei ALT angezeigt". Dann scrollt STRG + L, ALT, l (das ist ein Kleinbuchstabe L) den Bildschirm und löscht dann den Scrollback-Puffer.

(relevant für das OP, weil ich eine Verbindung zu einem Ubuntu-Server herstelle, aber anscheinend auch relevant, egal was auf Ihrem Server läuft.)

TecBrat
quelle
Ein 3 Jahre alter Kommentar von @Dennis Williamson führte mich zu dieser Antwort.
TecBrat
Auch gegeben, dass in den „Fenster“ Einstellungen von PuTTY Sie die „System - Menü erscheint auf ALT-Space“ aktiviert können Sie schnell tun CTRL+Ldann ALT+Space, Udie erste löscht das Terminalfenster dann die Rückholung für echte zurücksetzt.
Pierre Voisin
6

Der folgende Link erklärt, wie Sie diesen Alias ​​dauerhaft machen, damit Sie ihn nicht ständig eingeben müssen.

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

Dies sind die unter diesem Link beschriebenen Schritte.

  1. vim ~ / .bashrc oder gedit ~ / .bashrc oder welcher Texteditor auch immer Sie mögen
  2. Setzen Sie den Alias ​​cls = 'printf "\ 033c"' am Ende der Datei
  3. speichern und schließen
  4. . ~ / .bashrc (und ja, zwischen. und ~ sollte ein Leerzeichen stehen)
  5. Überprüfen Sie jetzt, ob alles funktioniert hat!

Ich nehme keine Anerkennung für diese Informationen, wenn ich sie nur weitergebe.

N1mr0d
quelle
4

Mit KDE und Ubuntu 12.04 LTS und dem "Konsole" -Terminal funktioniert keine der veröffentlichten Antworten. Das Drücken der Standardtastenkombination STRG + Umschalt + X funktioniert jedoch! Quelle:

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

The111
quelle
3
Dies wurde in späteren KDE-Versionen in STRG
Optimierter Coder
4

Mein menschliches Lieblingskommando dafür ist:

reset

Getestet auf xterm und VT100. Es hilft auch nach einer abnormalen Programmbeendigung. Behält den Befehlspuffer bei, sodass der Aufwärtspfeil die vorherigen Befehle durchläuft.

Prost: D.

elbedoit
quelle
3

Ich weiß, dass die Lösung zum Drucken neuer Zeilen nicht sehr unterstützt wird, aber wenn alles andere fehlschlägt, warum nicht? Insbesondere, wenn man in einer Umgebung arbeitet, in der wahrscheinlich jemand anderes den Bildschirm sehen kann, aber kein Keylog kann. Eine mögliche Lösung ist dann der folgende Alias:

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

Um den aktuellen Inhalt des Bildschirms zu "löschen" (oder besser gesagt auszublenden), geben Sie einfach c+Enteram Terminal ein.

nemesisfixx
quelle
2

Nur hinzufügen , dass tmuxScroll - Buffer nicht mit nicht löschen clear, resetoder printf. Du musst :clear-history. Siehe Link .

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

Dies funktioniert in Linux-Maschinen

Nithin
quelle
5
Obwohl wir uns für Ihre Antwort bedanken, wäre es besser, wenn sie zusätzlich zu den anderen Antworten einen zusätzlichen Wert liefern würde. In diesem Fall bietet Ihre Antwort keinen zusätzlichen Wert, da ein anderer Benutzer diese Lösung bereits veröffentlicht hat. Wenn eine vorherige Antwort für Sie hilfreich war, sollten Sie sie abstimmen, anstatt dieselben Informationen zu wiederholen.
Toby Speight
-53

Kompilieren Sie diese App.

#include <iostream>
#include <cstring>

int main()
{
  char str[1000];
  memset(str, '\n', 999);
  str[999] = 0;
  std::cout << str << std::endl;
  return 0;
}
Max
quelle
33
Entschuldigung, aber das ist nicht die beste Lösung. Es gibt bessere Methoden als 999 Zeilenumbrüche auszuspucken
pbfy0
2
Das hat tatsächlich einen gewissen Wert. In einigen Terminals wird durch Löschen des Bildschirms mit den anderen Methoden der Verlauf beendet und Sie können nicht mehr zurückblättern ... obwohl mein Finger bei 999 Zeilen müde werden würde. Armer Kerl.
Joshua David
@JoshuaDavid Der springende Punkt der Frage war, dass OP nach dem Löschen nicht zurückblättern wollte.
Socowi
@Socowi Mein Kommentar bezog sich auf diese -50 schlecht bewertete Antwort, nicht auf das OP. Aber du hast recht!
Joshua David