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ę?


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'

@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.


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'


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' 
}

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).


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.


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.


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


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



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!


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


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

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.