¿Cómo borrar la salida anterior en Terminal en Mac OS X?

524

Conozco el clearcomando que 'borra' la pantalla actual, pero lo hace simplemente imprimiendo muchas líneas nuevas: los contenidos borrados simplemente se desplazan hacia arriba.

¿Hay alguna forma de borrar por completo toda la salida anterior del terminal para que no pueda alcanzarla incluso desplazándome hacia arriba?

Eonil
fuente
1
¿Alguna vez encontró una manera de hacer esto que funcione en un script de shell?
Zev Eisenberg
77
@ Zeeisenberg No lo creo. De todos modos, ahora creo que no necesito esto en absoluto. Estoy satisfecho con Command+K.
Eonil
@ZevEisenberg mi respuesta actualizada (y otra respuesta) le muestra cómo hacerlo desde un script.
Alok Singhal

Respuestas:

1101

Para borrar el terminal manualmente:

+K

Command+ Kpara teclados más nuevos

Para borrar el terminal desde un script de shell;

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'
Alok Singhal
fuente
@fearless_fool apple.stackexchange.com/a/31887 podría hacerlo? Si es así, ¡házmelo saber!
Alok Singhal
Bueno, sí, pero vea a continuación ( stackoverflow.com/a/26615036/558639 ) para obtener una mejor manera.
fearless_fool
99
Si accidentalmente presionó esto, ¿cómo se vería el búfer borrado?
Joshua Pinter el
44
@JoshPinter, simplemente no lo presiones por accidente. :) (Considere usar clearpara todos los casos excepto donde necesite que desaparezca el historial de retroceso, por ejemplo, cuando vaya a imprimir).
Comodín
2
@Wildcard Bastante justo. :) Un buen consejo sobre el uso clear. Sin embargo, siento que deberían revertirse. Mecanografiar clearparece más intencional que golpear Command + K.
Joshua Pinter
85

Una mejor manera de borrar la pantalla desde un script ...

Si está utilizando la aplicación OSX Terminal (como lo indica el OP), un mejor enfoque (gracias a https://apple.stackexchange.com/a/113168 ) es solo esto:

clear && printf '\e[3J'

o más concisamente (punta de sombrero a https://stackoverflow.com/users/4834046/qiuyi ):

printf '\33c\e[3J'

que borra el búfer de desplazamiento y la pantalla. También hay otras opciones, consulte https://apple.stackexchange.com/a/113168 para obtener más información.

respuesta original

La respuesta de AppleScript dada en este hilo funciona, PERO tiene el desagradable efecto secundario de borrar CUALQUIER ventana de terminal que esté activa. ¡Esto es sorprendente si está ejecutando el script en una ventana y está tratando de hacer el trabajo en otra!

Para evitar esto, refine el AppleScript para que solo borre la pantalla si está al frente haciendo esto (tomado de https://apple.stackexchange.com/a/31887 ):

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

... pero como cuando no es la ventana actual, la salida se acumulará hasta que vuelva a ser actual, lo que probablemente no sea lo que desea.

temerario
fuente
1
Usé la "mejor manera" .bash_profiley es increíble porque a veces ya no obtengo el búfer fallido cuando abro una nueva ventana de terminal.
Patrick Roberts
1
Esta es la respuesta más conceptualmente correcta. La respuesta de qiuyi evita el && con el sacrificio de un poco de legibilidad. Si la respuesta de Alok pudiera extenderse para borrar el terminal que ejecuta el script actual, sería una mejora, pero esto es más simple.
Zack Morris
1
Esto es muuuuuuuuuuuuuuuuuuuuuuuuuuu mejor mejor para las secuencias de comandos. ¡Gracias un montón!
Andy
Esto es perfecto para cuando estás en otro sistema, ¡gracias!
JBRWilkinson
48

La linda manera es printf '\33c\e[3J'

qiuyi
fuente
3
Esta es la mejor manera. Deberíamos definir alias comoalias cls='printf "\33c\e[3J"'
mpyw
Gracias, esto es exactamente lo que necesitaba.
GigaBass
También funciona en iTerm2
Anders Zommarin
1
@ LoïcFaure-Lacroix, \33crealiza el equivalente del clearcomando, que básicamente solo desplaza la pantalla hasta que no pueda ver su contenido anterior. Borra la pantalla, pero no el búfer de desplazamiento hacia atrás (es decir, aún puede usar las barras de desplazamiento para ver la salida anterior). Agregue el \e[3Jpara borrar realmente el búfer de desplazamiento hacia atrás.
luiss
@EirNym, agregue function cls { printf '\33c\e[3J\33c' }línea ~/.profile(o en todo el sistema /etc/profile). Esto debería funcionar para entornos de escritorio en macOS, FreeBSD, Linux, etc. Tenga en cuenta que el extra \33ces para borrar el \e[3Jliteral extra en no MacOS (básicamente para Linux / FreeBSD, solo necesitamos printf '\33c').
Cuervo vulcano
33

Ponga esto en su .bash_profile o .bashrc

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}
Robert Simmons Jr.
fuente
Esta debería ser la respuesta correcta. AppleScript puede ser complicado, pero bueno, hace el trabajo. Gracias.
allanberry
Había votado, pero otra respuesta señala que esto borra todas las ventanas.
Michael Bushe
20

En Mac OS X Terminal, esta funcionalidad ya está integrada en la Aplicación de terminal como View->Clear Scrollback(El valor predeterminado es CMD+ K).

Por lo tanto, puede reasignar esto a su gusto con los atajos de teclado de Apple. Simplemente agregue un nuevo acceso directo para Terminal con el comando "Clear Scrollback". (Uso CMD+ L, porque es similar a CTRL+ Lpara borrar el contenido actual de la pantalla, sin borrar el búfer).

No estoy seguro de cómo usaría esto en un script (tal vez AppleScript como otros han señalado).

Playa
fuente
1
A partir de Yosemite (10.10), View->Clear Scrollbackya no está presente en el menú de la Terminal. Sin embargo, el atajo de teclado CMD+ Ktodavía funciona.
Nicolas Miari
1
Parece que @NicolasMiari Clear Scrollbackacaba de mudarse Viewa EditYosemite.
BrainSteel
10

Con Mac OS X Yosemite (10.10) use Option + Command + Kpara borrar el desplazamiento en Terminal.app.

David J.
fuente
9

O puede enviar un salto de página (feed de formulario ASCII) presionando:

CTRL+L

Si bien esto técnicamente solo comienza una nueva página, tiene el mismo efecto neto que todos los demás métodos, a la vez que es mucho más rápido (a excepción de la solución Apple + K, por supuesto).

Y debido a que este es un comando de control ASCII, funciona en todos los shells.

usuario2897962
fuente
1
Eso borra la pantalla pero deja intacto el búfer de desplazamiento.
George
no es lo mismo si quieres usar cmd + f por ejemplo
bormat
7

Para eliminar solo la última salida:

+L

Para borrar completamente la terminal:

+K

Aman Jain
fuente
6

Comando + K borrará la salida anterior

Para borrar el texto ingresado, primero salte a la izquierda con " Comando + A " y luego borre el texto a la derecha del puntero con " Control + K ".

Ejemplos visuales: ingrese la descripción de la imagen aquí

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

borra todo, funciona bien en osX también. muy aseado

jeevjyot singh chhabda
fuente
5

¡Haz lo correcto, haz lo correcto!

Borrar a la marca anterior:Command-L

Borrar al marcador anterior:Option-Command-L

Claro para comenzar: Command-K

Ayuda a tus muchachos!

McAllister Bowman
fuente
1

No pude hacer que ninguno de los anteriores funcione (en macOS).

Una combinación funcionó para mí

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

Esto borra el búfer y la pantalla.

Michael Baldry
fuente
¿Qué es IO.Write? Tuve que reemplazarlo con printf para que funcione. Gracias de cualquier manera. Este funciona mejor para mí
Fitsyu
1
No estoy seguro de por qué elegí IO.write. Debería funcionar igual, sin embargo, decide imprimir esos caracteres en el terminal.
Michael Baldry
1

Escribir lo siguiente en la terminal borrará su historial (lo que significa que usar la flecha hacia arriba no le dará nada), pero no borrará la pantalla:

history -c
phil
fuente
Lo hace. @phil, ¿los elimina permanentemente del disco o todavía se pueden recuperar de alguna manera?
Steven Roose
Básicamente, elimina el archivo ~ / .bash_history, por lo que si puede recuperar eso, puede recuperar los comandos que se han borrado
Ryan Pendleton
No, no funciona. El historial desplegado todavía existe, y puedo desplazarme hacia arriba para verlos nuevamente.
Eonil
27
No es lo que se le pidió. Esto borra el historial, no el búfer actual, que son dos cosas muy diferentes.
Sean Cameron
1
No es lo que se pidió, y dañino ; Simplemente me mordió esto, y mi historia contenía cosas importantes.
Elazar
0

Prueba esto, si estás abrumado con la salida si quieres un filtro

actividad de adb -d shell dumpsys | grep ActivityRecord

sreekumar
fuente
-4

CMD + K parece funcionar todo el tiempo para mí.

CoeB
fuente
2
Esta es la misma respuesta que la aceptada escrita hace 8 años.
piksel bitworks