Cómo borrar la salida anterior en el terminal en Mac OS X?


Conozco el comando clear que 'borra' la pantalla actual, pero lo hace simplemente imprimiendo muchas líneas nuevas - el contenido borrado simplemente se desplaza hacia arriba.

¿Hay alguna manera de borrar completamente toda la salida anterior de la terminal para que no pueda llegar a ella ni siquiera desplazándome hacia arriba?

Author: DavidG, 2010-02-04

11 answers

Para limpiar el terminal manualmente:

+K

Mando+K para teclados más nuevos

Para limpiar el terminal desde dentro de un script de shell;

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'
 843
Author: Alok Singhal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-20 03:13:50

Una mejor manera...

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

clear && printf '\e[3J'

Que borra el búfer de desplazamiento. Y es más rápido que ejecutar AppleScript. También hay otras opciones, ver https://apple.stackexchange.com/a/113168 para más información.

Respuesta original

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

Evita esto refinando el AppleScript para que solo borre la pantalla si está más 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 apilará hasta que se vuelva actual de nuevo, lo que probablemente no sea lo que quieras.

 54
Author: fearless_fool,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 12:45:06

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

 36
Author: qiuyi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-26 09:43:31

Pon esto en tu .bash_profile o .bashrc

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}
 33
Author: Robert Simmons Jr.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-22 07:16:30

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

Así que puedes reasignar esto como quieras con los atajos de teclado de Apple. Simplemente agregue un nuevo acceso directo para Terminal con el comando "Clear Scrollback". (Yo uso CMD+L, porque es similar a CTRL+L para borrar el actual contenido 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).

 18
Author: SeaSide,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-14 18:18:44

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

 9
Author: David J.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-10 22:18:43

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

CTRL+L

Mientras que esto técnicamente solo comienza una nueva página, esto tiene el mismo efecto neto que todos los otros métodos, mientras que es mucho más rápido (excepto por la solución Apple+K, por supuesto).

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

 8
Author: user2897962,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-19 14:13:34
clear && printf '\e[3J'

Borra todo, funciona bien en osX también. muy limpio

 4
Author: jeevjyot singh chhabda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-09 06:31:54

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

history -c
 4
Author: phil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-26 23:01:11

No pude hacer que nada de lo anterior funcionara (en macOS).

Una combinación funcionó para mí -

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

Esto borra el búfer y la pantalla

 1
Author: Michael Baldry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-06 13:20:09

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

 -4
Author: CoeB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-02 20:46:03