Jak wyczyścić poprzednie dane wyjściowe w terminalu w systemie Mac OS X?

523

Znam clearpolecenie, które „czyści” bieżący ekran, ale robi to po prostu, drukując wiele nowych linii - wyczyszczona zawartość jest po prostu przewijana w górę.

Czy istnieje sposób, aby całkowicie wyczyścić wszystkie poprzednie dane wyjściowe z terminala, aby nie można było do nich dotrzeć nawet przewijając w górę?

Eonil
źródło
1
Czy kiedykolwiek znalazłeś sposób na to, który działa w skrypcie powłoki?
Zev Eisenberg
7
@ZevEisenberg Nie sądzę. W każdym razie teraz myślę, że wcale tego nie potrzebuję. Jestem zadowolony z Command+K.
Eonil
@ZevEisenberg moja zaktualizowana odpowiedź (i jeszcze jedna odpowiedź) pokazuje, jak to zrobić ze skryptu.
Alok Singhal

Odpowiedzi:

1098

Aby ręcznie wyczyścić terminal:

+K

Command+K dla nowszych klawiatur

Aby wyczyścić terminal ze skryptu powłoki;

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'
Alok Singhal
źródło
@fearless_fool apple.stackexchange.com/a/31887 może to zrobić? Jeśli tak, daj mi znać!
Alok Singhal
Tak, ale patrz poniżej ( stackoverflow.com/a/26615036/558639 ), aby uzyskać lepszy sposób.
nieustraszony_fool
9
Gdybyś to przypadkowo nacisnął, jak byś poszedł do przeglądania wyczyszczonego bufora?
Joshua Pinter
4
@JoshPinter, po prostu nie naciskaj go przypadkowo. :) (Rozważ użycie clearwe wszystkich przypadkach, z wyjątkiem sytuacji, gdy potrzebujesz faktycznej historii przewijania, aby faktycznie zniknęła, np. Kiedy masz zamiar wydrukować.)
Wildcard
2
@Wildcard Do przyjęcia. :) Dobra rada na temat korzystania clear. Wydaje mi się, że należy je odwrócić. Pisanie clearwydaje się bardziej celowe niż uderzanie Command + K.
Joshua Pinter,
85

Lepszy sposób na wyczyszczenie ekranu ze skryptu ...

Jeśli korzystasz z aplikacji OSX Terminal (jak twierdzi OP), lepsze podejście (dzięki https://apple.stackexchange.com/a/113168 ) jest po prostu następujące:

clear && printf '\e[3J'

lub bardziej zwięźle (wskazówka na https://stackoverflow.com/users/4834046/qiuyi ):

printf '\33c\e[3J'

który usuwa bufor przewijania, a także ekran. Istnieją również inne opcje, zobacz https://apple.stackexchange.com/a/113168, aby uzyskać więcej informacji.

oryginalna odpowiedź

Odpowiedź AppleScript podana w tym wątku działa, ALE ma ona nieprzyjemny efekt uboczny czyszczenia KAŻDEGO okna terminala, które jest aktywne. Jest to zaskakujące, jeśli uruchamiasz skrypt w jednym oknie, a próbujesz wykonać pracę w innym!

Można tego uniknąć, dopracowując AppleScript, aby wyczyścić ekran tylko wtedy, gdy jest on na pierwszym planie, robiąc to (zaczerpnięte z https://apple.stackexchange.com/a/31887 ):

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

... ale jak wtedy, gdy nie jest to bieżące okno, dane wyjściowe będą się układać w stos, aż znów staną się aktualne, co prawdopodobnie nie jest tym, czego chcesz.

nieustraszony głupiec
źródło
1
Użyłem „lepszego sposobu” .bash_profilei jest niesamowity, ponieważ czasami nie otrzymuję błędnego bufora podczas otwierania nowego okna terminala.
Patrick Roberts
1
To jest najbardziej poprawna koncepcyjnie odpowiedź. W odpowiedzi qiuyi unika się && poświęcając małą czytelność. Jeśli odpowiedź Aloka mogłaby zostać rozszerzona w celu wyczyszczenia terminala, który uruchamia bieżący skrypt, byłaby to poprawa, ale jest to prostsze.
Zack Morris,
1
To jest waaaaaaaaaaay lepiej dla skryptów. Wielkie dzięki!
Andy,
Jest to idealne rozwiązanie, gdy jesteś podłączony do innego systemu, dzięki!
JBRWilkinson
48

Ładny sposób jest printf '\33c\e[3J'

qiuyi
źródło
3
To najlepszy sposób. Powinniśmy zdefiniować alias typualias cls='printf "\33c\e[3J"'
mpyw
Dziękuję, właśnie tego potrzebowałem.
GigaBass
Działa również w iTerm2
Anders Zommarin
1
@ LoïcFaure-Lacroix, \33cwykonuje odpowiednik clearpolecenia, które po prostu przewija ekran, dopóki nie zobaczysz jego poprzedniej zawartości. Czyści ekran, ale nie bufor przewijania wstecz (tzn. Nadal możesz używać pasków przewijania, aby zobaczyć stare wyjście). Dodaj, \e[3Jaby faktycznie wyczyścić bufor przewijania wstecz.
luiss
@ EirNym, dodaj function cls { printf '\33c\e[3J\33c' }linię w ~/.profile(lub w całym systemie /etc/profile). Powinno to działać w środowiskach stacjonarnych w macOS, FreeBSD, Linux itp. Uwaga: dodatkowym rozwiązaniem \33cjest usunięcie dodatkowego \e[3Jliterału w systemie innym niż macOS (w zasadzie w przypadku Linux / FreeBSD, potrzebujemy tylko printf '\33c').
vulcan raven
33

Umieść to w swoim .bash_profile lub .bashrc

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}
Robert Simmons Jr.
źródło
To powinna być poprawna odpowiedź. AppleScript może być niechlujny, ale hej, wykonuje zadanie. Dzięki.
allanberry
Głosowałem, ale inna odpowiedź zauważa, że ​​to usuwa wszystkie okna!
Michael Bushe,
20

W terminalu Mac OS X ta funkcja jest już wbudowana w aplikację terminalową jako View->Clear Scrollback(Domyślnie jest to CMD+K ).

Możesz więc przypisać to dowolnie za pomocą skrótów klawiaturowych Apple. Wystarczy dodać nowy skrót do terminala za pomocą polecenia „Wyczyść przewijanie”. (Używam CMD+ L, ponieważ jest podobny do CTRL+L aby wyczyścić bieżącą zawartość ekranu, bez czyszczenia bufora).

Nie wiem, jak byś to wykorzystał w skrypcie (może AppleScript, jak zauważyli inni).

Nadmorski
źródło
1
Począwszy od Yosemite (10.10), View->Clear Scrollbacknie jest już obecny w menu Terminala. Jednak skrót klawiaturowy CMD+ Knadal działa.
Nicolas Miari
1
@NicolasMiari Wygląda na to Clear Scrollbackwłaśnie przeniósł się z Viewdo Editw Yosemite.
BrainSteel,
10

W systemie Mac OS X Yosemite (10.10) użyj, Option + Command + Kaby wyczyścić przewijanie w Terminal.app.

David J.
źródło
9

Lub możesz wysłać podział strony (wysuw formularza ASCII), naciskając:

CTRL+L

Chociaż technicznie rozpoczyna się nowa strona, ma to ten sam efekt netto, co wszystkie inne metody, a jednocześnie jest znacznie szybszy (z wyjątkiem oczywiście rozwiązania Apple + K).

Ponieważ jest to polecenie sterujące ASCII, działa ono we wszystkich powłokach.

użytkownik 2897962
źródło
1
Spowoduje to wyczyszczenie ekranu, ale pozostawi nienaruszony bufor przewijania.
George,
to nie to samo, jeśli chcesz użyć cmd + f na przykład
bormat
7

Aby usunąć tylko ostatnie wyjście:

+L

Aby całkowicie wyczyścić terminal:

+K

Aman Jain
źródło
6

Command + K. usunie poprzednie wyjście

Aby wyczyścić wprowadzony tekst, najpierw przeskocz w lewo za pomocą „ Command + A ”, a następnie wyczyść tekst po prawej stronie wskaźnika za pomocą „ Control + K ”.

Przykłady wizualne: wprowadź opis zdjęcia tutaj

Punnerud
źródło
5
clear && printf '\e[3J'

usuwa wszystko, działa również na osX. bardzo schludny

jeevjyot singh chhabda
źródło
5

Rób dobrze, rób dobrze!

Przejście do poprzedniego znaku:Command-L

Przejście do poprzedniej zakładki:Option-Command-L

Wyczyść, aby rozpocząć: Command-K

Pomóżcie swoim chłopcom!

McAllister Bowman
źródło
1

Nie mogłem zmusić żadnego z powyższych do pracy (na macOS).

Połączenie zadziałało dla mnie -

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

Spowoduje to wyczyszczenie bufora i ekranu

Michael Baldry
źródło
Co to jest IO.write? Musiałem go zastąpić printf, aby działał. W każdym razie dzięki. Ten działa dla mnie najlepiej
Fitsyu,
1
Nie jestem pewien, dlaczego wybrałem IO.write. Powinno działać tak samo, jednak zdecydujesz się wydrukować te znaki na terminalu.
Michael Baldry,
1

Wpisanie następującego w terminalu spowoduje wymazanie historii (co oznacza, że ​​użycie strzałki w górę niczego nie da) - ale nie wyczyści ekranu:

history -c
phil
źródło
To robi. @phil czy usuwa je na stałe z dysku, czy też można je w jakiś sposób odzyskać?
Steven Roose
Zasadniczo usuwa plik ~ / .bash_history, więc jeśli możesz to odzyskać, możesz odzyskać polecenia, które zostały usunięte
Ryan Pendleton
Nie, to nie działa. Przewinięta historia wciąż istnieje i mogę przewijać w górę, aby zobaczyć ją ponownie.
Eonil
26
Nie o co pytano. Czyści to historię, a nie bieżący bufor, które są dwiema bardzo różnymi rzeczami.
Sean Cameron
1
Nie to, o co pytano, i szkodliwe ; Po prostu mnie to ugryzło, a moja historia zawierała ważne rzeczy.
Elazar
0

Spróbuj tego, jeśli jesteś przytłoczony danymi wyjściowymi, jeśli chcesz filtr

adb -d aktywność dumpsys powłoki | grep ActivityRecord

sreekumar
źródło
-4

Wydaje mi się, że CMD + K cały czas działa.

CoeB
źródło
2
To ta sama odpowiedź, co przyjęta 8 lat temu.
bitsel piksel