Mit welchen Befehlen kann ich mein Terminal zurücksetzen und löschen?

64

Ich habe den Befehl verwendet:

reset

mein Terminal zu löschen. Obwohl ich mir ziemlich sicher bin, dass das nicht das ist, was ich tun sollte. Zurücksetzen setzt, wie der Name schon sagt, Ihr gesamtes Terminal zurück (ändert viele Dinge). Folgendes möchte ich:

Ich möchte im Grunde den Befehl verwenden clear. Wenn Sie jedoch löschen und dann nach oben scrollen, erhalten Sie immer noch Tonnen von Dingen von früher. Im Allgemeinen ist dies kein Problem, aber ich schaue auf lange Bruttoprotokolle und möchte sicherstellen, dass ich nur die neueste ansehe. Ich weiß, dass ich das gebrauchen könnte moreoder so, aber ich bevorzuge diesen Ansatz.

Sixtyfootersdude
quelle
Es scheint viel Verwirrung darüber zu geben, was genau hier gefragt wird. kannst du die frage überhaupt klären? Was genau möchten Sie erreichen, indem Sie den Scrollback-Puffer Ihres Terminals löschen? (Wenn ja, welche Terminal-Anwendung verwenden Sie?)
Quack Quixote
1
Strg-L löscht den Bildschirm in Bash (im Standard-Emacs-Modus), ähnlich wie beim Ausführen des Löschprogramms.
Dies wurde gerade im Bash-Terminal in IntelliJ IDE getestet. Funktioniert gut und löscht den Scrollback, was genau das ist, was ich wollte. Vielen Dank.
Ian Lewis
Ich weiß, dass dies zu Tode beantwortet wurde, aber ich denke, was Sie wollen, ist clear && printf '\033[3J'. Kein Zurücksetzen des Terminals, nur Löschen des Bildschirmtextes. Siehe diesen Beitrag: superuser.com/questions/555554/…
jwd

Antworten:

57

Der Scrollback-Buffer ist kein Feature von bash, sondern des Terminal-Programms. Sie haben nicht gesagt, welches Terminal Sie verwenden.

Wenn Sie xterm verwenden, können Sie möglicherweise die gespeicherten Zeilen löschen, indem Sie ESC-c an das Terminal senden.

Dies funktioniert möglicherweise nicht mit jedem Terminalprogramm, das Sie verwenden.

Unter Linux wird dies wahrscheinlich funktionieren:

echo -e '\0033\0143'

Unter FreeBSD akzeptiert echo -e nicht, also können Sie versuchen:

printf '\033\143'
Craig
quelle
Ich benutze xterm. Allerdings verstehe ich nicht, was du meinst. Soll ich literarisch schreiben echo ESC-c?
Sixtyfootersdude
2
@sixtyfootersdude: Nein, kein wörtliches Wort ESC. Lesen Sie die Artikel "Escape-Zeichen" und "Steuerzeichen" auf Wikipedia - ESCbezeichnet häufig das ASCII-Zeichen 0x1B, das Sie durch Drücken von ^Vgefolgt von einfügen können Esc.
Grawity
1
Das solltest du nicht. Wenn Ihre Lösung das Schreiben von unformatierten Terminal-Escape-Sequenzen umfasst, sollten Sie die Lösung überdenken. Ich würde "weniger" anstelle von Katze verwenden. Wenn Sie wirklich etwas über "Terminal-Escape-Sequenzen" erfahren möchten, kann Google Ihnen helfen.
Craig
2
@HaraldNordgren Es ist besser, den Standard printf als echo -e zu verwenden.
Gute Person
3
Warum \0143statt c?
Ruakh
51

Verwenden Sie für jeden Auftrag das richtige Werkzeug:

  • Mit cleardas Terminalfenster löschen.

  • Verwenden resetSie diese Option, um Ihr Terminal zurückzusetzen, wenn es durch Steuersequenzen gestört wird.

  • Verwenden catSie diese Option nur, wenn Sie viele Daten ohne Unterbrechung von einem Ort zum anderen streamen möchten .

  • Verwenden Sie ein Pager-Programm wie lessoder most, um Ausgabeseiten anzuzeigen.

  • Verwenden Sie tail -f /var/log/foo.log /var/log/bar.logdiese Option , um verschiedene Protokolldateien anzuzeigen.

    • Bei GNU tailist die -FOption besser, da sie der Datei auch dann folgen kann, wenn an ihrer Stelle eine neue Datei angezeigt wird, wie es bei Protokolldateien üblich ist.
große Nase
quelle
14
Dies beantwortet meine Frage nicht wirklich.
Sixtyfootersdude
7
Ja das tut es. Keine Katzendateien zum Lesen, keine Katzendateien zum Verketten. Verwenden Sie weniger oder mehr zum Lesen von Dateien - dann haben Sie nicht das gleiche Problem.
Rich Bradshaw
Look up "nutzlosen Einsatz von Katze"
Galois
Viele Menschen lehnen es ab, catirgendetwas zu lesen, aber für kleine Dateien ist es für sie viel sinnvoller, catals etwas zu verwenden less. Sobald die Datei auf dem Terminal abgelegt wurde, können Sie so oft Sie möchten zu der Datei zurückblättern, anstatt sie entlassen zu müssen, lessbevor Sie etwas anderes tun.
GKFX
22

Nur um die technische Antwort zu geben: resetInitialisieren Sie das Terminal neu, als wäre es von Grund auf neu geöffnet worden. stty sanewird eine Menge der gleichen Funktionalität tun (ohne den Reset). Dies ist dasselbe wie ^L(Strg + L) (irrc) und tput clear. Trotz allem, was das vorherige Poster (@grawity) sagte, cleargibt es keine Zeilenumbrüche. Es sendet das TERMZurücksetzen des Befehls, wie in (xterm) definiert, terminfooder termcapfür mich ist gnome-terminales dasselbe wie der Befehl perl -e'print "\33[H\33[2J"'.

Wenn Sie nur den Puffer löschen möchten - im Vergleich zum Zurücksetzen des gesamten Terminals - versuchen Sie dies tput reset. Es sollte sehr schnell gehen und tun, was Sie wollen. (Obwohl Sie wirklich Dateien mit lesen sollten less)

tput reset, sendet den terminfo-Wert zum Zurücksetzen - auf meinem Terminal (xterm) ist er derselbe wie perl -e'print "\33c"'

Evan Carroll
quelle
1
Ich habe nicht gesagt, cleargibt ein paar Zeilenumbrüche aus. Als Alternative habe ich nur einen Befehl angegeben , da clearnur der Bildschirm gelöscht wird, nicht aber der Scrollback-Puffer. (Zumindest nicht in PuTTY oder Konsole.)
grawity
1
Aus diesem Grund ist das Drucken einer Reihe von Zeilenumbrüchen keine echte Alternative zum Löschen - Sie haben keine Vorstellung davon, wie das Terminal mit dem Löschsignal umgeht. Es ist besser, nur neuen Leuten mitzuteilen, dass Sie über eine Datenbank verfügen, die mit Ihrem Terminal umgehen kann. Sie verfügt über zwei Schlüsselwerte, von denen einer cleareinem Signal als Signalname und einer reseteinem Signal zugeordnet ist - und nur der letztere führt zu einem gelöschten Scroll-Back-Puffer. resetschickt letztere über andere lustige Sachen.
Evan Carroll
1
Sixtyfootersdude ursprüngliche Frage nach, clearwird nicht zurückgesetzt seine Rückholung. (Funktioniert ESC cin xtermund VTE-basiert, aber nicht in PuTTY und Konsole.) Er möchte auch nicht verwenden reset, da es mehr zurücksetzt, als er will. (Ich weiß nicht, welches Terminal er verwendet - aber vergleichen Sie sttyvor und nach dem Zurücksetzen.)
Grawity
2
wie gesagt, er will wohl tput reset, dass das reset signal an das terminal gesendet wird - ohne den term tatsächlich neu zu initialisieren. "reset - Anstatt Initialisierungszeichenfolgen auszugeben, werden die Rücksetzzeichenfolgen des Terminals ausgegeben, falls vorhanden (rs1, rs2, rs3, rf). Wenn die Rücksetzzeichenfolgen nicht vorhanden sind, aber Initialisierungszeichenfolgen vorhanden sind, werden die Initialisierungszeichenfolgen ausgegeben. Ansonsten verhält sich reset identisch zu init. " In diesem Fall haben wir die Zeichenfolgen zurückgesetzt, damit die Init-Zeichenfolgen nicht ausgeführt werden.
Evan Carroll
+1: für den Vorschlag ist jedoch tput resetziemlich langsam (wie reset). printf '\033\143'ist viel schneller. Gibt es einen Grund, warum die printf-Methode gefährlich / schlecht ist?
Sixtyfootersdude
9

Ein anderes Terminal ist iTerm2, und es hat eine etwas seltsame Escape-Sequenz, mit der das Zurückblättern gelöscht wird. In einer Bash-Shell verwende ich etwas wie:

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

in einem Skript. Es handelt sich also im Grunde genommen um ein ESC-Zeichen, gefolgt von " ]50;ClearScrollback" und einem BEL-Zeichen.

Sam Mason
quelle
1
CMD + K funktioniert in iTerm2. STRG + K funktioniert in vielen anderen.
Blockloop
Ich mag diese Lösung, weil sie es mir ermöglicht, den iTerm2-Scrollback-Puffer aus einem Shell-Skript zu löschen, wenn die Dinge mögen clearund resetnicht. Dies ist jedoch nicht wirklich die beste Antwort auf die Frage. Ich denke, die richtige Antwort für diesen Fall ist, was auch immer die Terminalanwendung bietet, wie Befehl-K in iTerm2, Steuerung-K in anderen usw.
LS
8

Der wahrscheinlich beste Weg, um alles zu löschen, ist die Verwendung der Terminalfunktion:

  • Konsole: Ctrl+ Shift+ KAnsicht → Scrollback löschen und zurücksetzen
  • GNOME-Terminal: Bearbeiten → Zurücksetzen und Löschen
  • PuTTY: Ctrl+ right-click→ Scrollback löschen

Auf diese Weise werden beide Puffer bereinigt und der Terminalstatus wird auf genau das zurückgesetzt, was er beim Start war (was möglicherweise mit der Verwendung identisch ist oder nicht reset).

Grawity
quelle
Hmm, das habe ich nicht unter meinem Gnom ...
sixtyfootersdude
@sixtyfootersdude: Ich bin sicher, dass es da ist , ich kenne nur nicht das genaue Menü (kann gnome-terminalmich im Moment nicht benutzen ) ... Schau dir "Tools" und andere Menüs an.
Grawity
In xterm seine Strg-Mittel-Taste -> "Zurücksetzen und Löschen gespeicherter Zeilen"
Craig
3
weniger -W + F foo.log

+Fist für "folgen", ähnlich wie, tail -faber Sie können auch zurückblättern.

Bei allen vte-basierten Terminals (GNOME, Xfce, Roxterm) und KDE-Konsole können Sie mit dem Mausrad einen Bildlauf durchführen less. Das finde ich recht praktisch.


Alternative zu clear:

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

xterm -e 'tail -f foo.log'
Grawity
quelle
3

Auf Mac OS X Terminal.app:

Ansicht -> Scrollback löschen (oder command- K)

acajaja
quelle
@Rohit Wenn die Frage speziell zu Mac OS X Terminal.app gestellt wurde, ist dies eine gute Antwort. Die ursprüngliche Frage ist jedoch, so gut ich kann, zweideutig, was Terminal und Betriebssystem anbelangt.
David J.
2

Es ist kein "Bash" -Problem. Dies hängt vom verwendeten Terminal ab. Zum Beispiel verwende ich "iterm2" mit MacBook, um eine entfernte Linux-Maschine zu verbinden. Sie können den Puffer mit "Befehl + K" bereinigen oder im Menü "Bearbeiten" -> "Puffer löschen" auswählen.

Steven Huang
quelle
1

So löschen Sie den Konsolenbildschirm und den Scrollback-Puffer beim Ausführen von PuTTY:

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

Dies sind eigentlich 2 "Esc" -Sequenzen, die unabhängig voneinander agieren. Sie können in jeder Reihenfolge verwendet werden:

# 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"

Wenn Sie echo -en "\ec"festlegen, welche Einstellungen das Terminal zurücksetzen soll, werden möglicherweise einige Ihrer anderen Terminaleinstellungen geändert. Anstelle von "Zurücksetzen" können Sie Folgendes tun:

# 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"

Sie können dies in ein Shell-Skript einfügen und es funktioniert einwandfrei.


Falls es einige Systemabhängigkeiten gibt:

Ich verwende PuTTY Connection Manager (Version 0.7.1 BETA (Build 136)) mit PuTTY (Release 0.60).

Eingabe:

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

Berichte:

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

Um den Bildschirmpuffer für Hardware-TTY in FreeBSD zu bereinigen, können Sie "vidcontrol - Systemkonsolensteuerung und Konfigurationsdienstprogramm" mit dem Parameter -C Leeren Sie den Verlaufspuffer.

vidcontrol -C

Der Befehl löscht den gesamten Bildschirmpuffer für die aktuelle Konsole, über dem, was Sie gerade sehen. Vielleicht möchten Sie zuerst "klären" oder nicht - ganz nach Ihren Wünschen.

Benutzer
quelle
0

Wenn Sie sicher sein möchten, dass Sie die neuesten Einträge in einer Protokolldatei anzeigen, ist es wahrscheinlich am besten, tail anstelle von clear/ zu verwenden, von catdem ich annehme, dass Sie es verwenden.

Josh K
quelle
Eigentlich verwende ich tail -f (fortlaufende Protokolle), aber da sie gelegentlich Tausende von Zeilen ausspucken, ist es wichtig, einen Bildlauf zurück zu haben. Es wäre jedoch schön zu wissen, dass ich nicht zu einem älteren Baumstamm zurückschaue.
Sixtyfootersdude
0

Hmmm. Ich denke, wenn Sie konsole laufen, haben Sie Pech. Früher konnte man einfach "Scrollback löschen". Konsole lässt Sie das nicht mehr tun. Sie müssen es auch zurücksetzen, damit alle Programme, die Sie ausgeführt haben, beendet werden. Ich brauche wohl ein neues Terminalprogramm ......

Bruce
quelle