Wie lösche ich die vorherige Ausgabe in Terminal unter Mac OS X?

523

Ich kenne den clearBefehl, der den aktuellen Bildschirm "löscht", aber dies geschieht nur durch Drucken vieler Zeilenumbrüche - der gelöschte Inhalt wird nur nach oben gescrollt.

Gibt es eine Möglichkeit, alle vorherigen Ausgaben des Terminals vollständig zu löschen, sodass ich sie nicht einmal durch Scrollen nach oben erreichen kann?

Eonil
quelle
1
Haben Sie jemals einen Weg gefunden, dies in einem Shell-Skript zu tun?
Zev Eisenberg
7
@ZevEisenberg Das glaube ich nicht. Wie auch immer, jetzt denke ich, ich brauche das überhaupt nicht. Ich bin zufrieden mit Command+K.
Eonil
@ZevEisenberg Meine aktualisierte Antwort (und eine andere Antwort) zeigt Ihnen, wie es aus einem Skript geht.
Alok Singhal

Antworten:

1098

So löschen Sie das Terminal manuell:

+K

Command+ Kfür neuere Tastaturen

So löschen Sie das Terminal aus einem Shell-Skript heraus;

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'
Alok Singhal
quelle
@fearless_fool apple.stackexchange.com/a/31887 könnte es tun? Wenn ja, lassen Sie es mich bitte wissen!
Alok Singhal
Ja, aber siehe unten ( stackoverflow.com/a/26615036/558639 ) für einen besseren Weg insgesamt.
fearless_fool
9
Wenn Sie dies versehentlich gedrückt haben, wie würde man den gelöschten Puffer anzeigen?
Joshua Pinter
4
@JoshPinter, drücke es einfach nicht versehentlich. :) (Erwägen Sie die Verwendung clearfür alle Fälle, außer wenn der Scrollback-Verlauf tatsächlich verschwinden soll, z. B. wenn Sie drucken möchten.)
Wildcard
2
@ Wildcard Fair genug. :) Gute Ratschläge zur Verwendung clear. Ich denke jedoch, dass sie umgekehrt werden sollten. Tippen clearscheint eher beabsichtigt als zu schlagen Command + K.
Joshua Pinter
85

Ein besserer Weg, um den Bildschirm innerhalb eines Skripts zu löschen ...

Wenn Sie die OSX Terminal-App verwenden (wie vom OP angegeben), ist ein besserer Ansatz (dank https://apple.stackexchange.com/a/113168 ) genau dies:

clear && printf '\e[3J'

oder genauer gesagt (Tipp an https://stackoverflow.com/users/4834046/qiuyi ):

printf '\33c\e[3J'

Dadurch werden sowohl der Scrollback-Puffer als auch der Bildschirm gelöscht. Es gibt auch andere Optionen. Weitere Informationen finden Sie unter https://apple.stackexchange.com/a/113168 .

ursprüngliche Antwort

Die in diesem Thread angegebene AppleScript-Antwort funktioniert, ABER sie hat den bösen Nebeneffekt, dass JEDES Terminalfenster gelöscht wird, das gerade aktiv ist. Dies ist überraschend, wenn Sie das Skript in einem Fenster ausführen und versuchen, die Arbeit in einem anderen zu erledigen!

Sie vermeiden dies, indem Sie das AppleScript so verfeinern, dass der Bildschirm nur dann gelöscht wird, wenn es ganz vorne ist (siehe https://apple.stackexchange.com/a/31887 ):

osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'

... aber wenn es nicht das aktuelle Fenster ist, wird die Ausgabe gestapelt, bis sie wieder aktuell wird, was wahrscheinlich nicht das ist, was Sie wollen.

furchtloser Dummkopf
quelle
1
Ich habe den "besseren Weg" benutzt .bash_profileund es ist großartig, weil ich manchmal beim Öffnen eines neuen Terminalfensters nicht mehr den fehlerhaften Puffer bekomme.
Patrick Roberts
1
Dies ist die konzeptionell korrekteste Antwort. Die Antwort von qiuyi vermeidet das &&, wenn ein wenig Lesbarkeit geopfert wird. Wenn Aloks Antwort erweitert werden könnte, um das Terminal zu löschen, auf dem das aktuelle Skript ausgeführt wird, wäre dies eine Verbesserung, aber dies ist einfacher.
Zack Morris
1
Dies ist waaaaaaaaaaay besser für Skripte. Vielen Dank!
Andy
Dies ist perfekt, wenn Sie mit einem anderen System arbeiten, danke!
JBRWilkinson
48

Der schöne Weg ist printf '\33c\e[3J'

Qiuyi
quelle
3
Dies ist der beste Weg. Wir sollten Alias ​​wiealias cls='printf "\33c\e[3J"'
mpyw
Danke, genau das habe ich gebraucht.
GigaBass
Funktioniert auch in iTerm2
Anders Zommarin
1
@ LoïcFaure-Lacroix \33cführt das Äquivalent des clearBefehls aus, der im Grunde nur den Bildschirm scrollt, bis Sie den vorherigen Inhalt nicht mehr sehen können. Es löscht den Bildschirm, aber nicht den Rücklaufpuffer (dh Sie können weiterhin die Bildlaufleisten verwenden, um die alte Ausgabe anzuzeigen). Fügen Sie das hinzu \e[3J, um den Bildlaufpuffer tatsächlich zu löschen.
Luiss
@EirNym, function cls { printf '\33c\e[3J\33c' }Zeile hinzufügen ~/.profile(oder systemweit /etc/profile). Dies sollte für Desktop-Umgebungen unter MacOS, FreeBSD, Linux usw. funktionieren. Beachten Sie, dass das Extra \33czum Löschen des zusätzlichen \e[3JLiterals in Nicht-MacOS dient (im Grunde genommen für Linux / FreeBSD, das wir nur benötigen printf '\33c').
Vulkanischer Rabe
33

Fügen Sie dies in Ihr .bash_profile oder .bashrc ein

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}
Robert Simmons Jr.
quelle
Dies sollte die richtige Antwort sein. AppleScript mag chaotisch sein, aber hey, erledigt den Job. Vielen Dank.
Allanberry
Hatte upvoted, aber eine andere Antwort stellt fest, dass dies alle Fenster löscht!
Michael Bushe
20

Unter Mac OS X Terminal ist diese Funktionalität bereits in die Terminalanwendung integriert View->Clear Scrollback(Standard ist CMD+ K).

Sie können dies also mit den Tastaturkürzeln von Apple nach Belieben neu zuweisen. Fügen Sie einfach eine neue Verknüpfung für Terminal mit dem Befehl "Scrollback löschen" hinzu. (Ich benutze CMD+ L, weil es CTRL+ ähnlich ist, Lum den aktuellen Bildschirminhalt zu löschen, ohne den Puffer zu löschen.)

Ich bin mir nicht sicher, wie Sie dies in einem Skript verwenden würden (möglicherweise AppleScript, wie andere darauf hingewiesen haben).

Strand
quelle
1
Ab Yosemite (10.10) View->Clear Scrollbackist es nicht mehr im Menü des Terminals vorhanden. Die Tastenkombination CMD+ Kfunktioniert jedoch weiterhin.
Nicolas Miari
1
@NicolasMiari Sieht so aus, Clear Scrollbackals wäre er gerade von Viewin Editnach Yosemite gezogen.
BrainSteel
10

Verwenden Sie unter Mac OS X Yosemite (10.10) Option + Command + K, um den Bildlauf in Terminal.app zu löschen.

David J.
quelle
9

Oder Sie können einen Seitenumbruch (ASCII-Formular-Feed) senden, indem Sie drücken:

CTRL+L

Während dies technisch gesehen nur eine neue Seite startet, hat dies den gleichen Nettoeffekt wie alle anderen Methoden, ist jedoch viel schneller (mit Ausnahme der Apple + K-Lösung natürlich).

Und da dies ein ASCII-Steuerbefehl ist, funktioniert er in allen Shells.

user2897962
quelle
1
Dadurch wird der Bildschirm gelöscht, der Scrollback-Puffer bleibt jedoch erhalten.
George
Es ist nicht dasselbe, wenn Sie beispielsweise cmd + f verwenden möchten
Bormat
7

So löschen Sie nur die letzte Ausgabe:

+L

So löschen Sie das Terminal vollständig:

+K

Aman Jain
quelle
6

Befehl + K löscht die vorherige Ausgabe

Um den eingegebenen Text zu löschen, springen Sie zuerst mit " Befehl + A " nach links und dann mit " Strg + K " rechts neben dem Zeiger .

Visuelle Beispiele: Geben Sie hier die Bildbeschreibung ein

Punnerud
quelle
5
clear && printf '\e[3J'

löscht alles, funktioniert auch gut auf osX. sehr gepflegt

jeevjyot singh chhabda
quelle
5

Mach das Richtige, mach das Richtige!

Klar zur vorherigen Marke:Command-L

Zum vorherigen Lesezeichen löschen:Option-Command-L

Klar zum Starten: Command-K

Hilf deinen Jungs!

McAllister Bowman
quelle
1

Ich konnte keines der oben genannten Dinge zum Laufen bringen (unter macOS).

Eine Kombination hat bei mir funktioniert -

IO.write "\e[H\e[2J\e[3J"

Dies löscht den Puffer und den Bildschirm

Michael Baldry
quelle
Was ist IO.write? Ich musste es durch printf ersetzen, damit es funktioniert. Danke trotzdem. Dieser funktioniert am besten für mich
Fitsyu
1
Ich bin mir nicht sicher, warum ich mich entschieden habe IO.write. Es sollte genauso funktionieren, aber Sie entscheiden sich, diese Zeichen auf dem Terminal zu drucken.
Michael Baldry
1

Wenn Sie im Terminal Folgendes eingeben, wird Ihr Verlauf gelöscht (dh wenn Sie den Aufwärtspfeil verwenden, erhalten Sie nichts), der Bildschirm wird jedoch nicht gelöscht:

history -c
phil
quelle
Es tut. @phil löscht es sie dauerhaft von der Festplatte oder sind sie noch irgendwie abrufbar?
Steven Roose
Grundsätzlich wird die Datei ~ / .bash_history gelöscht. Wenn Sie diese wiederherstellen können, können Sie die gelöschten Befehle wiederherstellen
Ryan Pendleton,
Nein, es funktioniert nicht. Es gibt noch einen gescrollten Verlauf, und ich kann nach oben scrollen, um sie wieder zu sehen.
Eonil
26
Nicht was gefragt wurde. Dies löscht den Verlauf und nicht den aktuellen Puffer. Dies sind zwei sehr unterschiedliche Dinge.
Sean Cameron
1
Nicht was gefragt wurde und schädlich ; Ich wurde nur davon gebissen und meine Geschichte enthielt wichtige Dinge.
Elazar
0

Versuchen Sie dies, wenn Sie mit der Ausgabe überfordert sind, wenn Sie einen Filter wünschen

adb -d shell dumpsys Aktivität | grep ActivityRecord

Sreekumar
quelle
-4

CMD + K scheint die ganze Zeit für mich zu funktionieren.

CoeB
quelle
2
Dies ist die gleiche Antwort wie die vor 8 Jahren geschriebene.
Piksel Bitworks