¿Puedo configurar bash para ejecutar “ clear ” antes de cada comando escrito en la consola?

Me gustaría configurar bash para ejecutar el comando clear cada vez que escribo algún comando en la terminal (antes ejecutando mi comando). ¿Cómo puedo hacer eso?

Estoy usando Debian Linux.

Comentarios

  • Encuentra este hilo es útil.
  • Solo curiosidad: ¿Qué ' s aplicas para esto? Excepto cuando ' m programas de depuración con una gran cantidad de resultados, por lo general quiero mantener tanto como sea posible en la pantalla para ayudarme a realizar un seguimiento del contexto I ' Estoy trabajando.

Respuesta

Bash tiene un gancho de precomando . Más o menos.

preexec () { clear } preexec_invoke_exec () { [ -n "$COMP_LINE" ] && return # do nothing if completing [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don"t cause a preexec for $PROMPT_COMMAND local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; # obtain the command from the history, removing the history number at the beginning preexec "$this_command" } trap "preexec_invoke_exec" DEBUG 

Comentarios

  • Gilles: pegué lo anterior en una terminal de consola y la salida de cada comando que ingresé posteriormente se borró antes de que pudiera leerlo. ¿Me estoy perdiendo algo? Además, ¿qué sucede con esto (y la otra respuesta a continuación) si invoco un script bash de varias líneas donde más de una línea (o cualquier línea que no sea la última) genera inter ¿Está buscando salida?
  • @Joe Esto debería borrar la pantalla después de presionar Enter, antes de ejecutar el comando. Funciona así para mí. El gancho preexec se ejecuta para cada comando interactivo, no ' importa si el comando es un comando incorporado o externo o muchos comandos.
  • @ Joe, debe agregar esta línea a continuación. No haga nada si está completo [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return; el problema es que PROMPT_COMMAND se está ejecutando y también está atrapado después del comando real; Además, ¿alguien puede decirme por qué local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; está aquí?
  • @JamesAndino history -1 imprime la última línea de comando, con un número de historial al frente. El filtro sed quita el número de historial.
  • @JamesAndino Eso lo hizo funcionar (y veo que Giles lo agregó a su respuesta).

Respuesta

bind "RETURN: "\e[1~clear; \e[4~\n"" 

Después de eso, cada vez que presione return en lugar de simplemente escribir \n se moverá al principio de la línea, ingrese el texto clear;, luego muévase al final e ingrese \n como se esperaba.

Comentarios

  • Una nueva línea hace que el indicador se imprima de todos modos, por lo que poner el claro en el indicador logra lo mismo sin contaminar el historial de comandos con clear comandos.
  • @ jw013 La diferencia es que en mi caso clear se ejecuta antes de que el comando y la salida del comando no ' t desaparezcan. Sin embargo, en caso de que sí lo haga.
  • Desearía que hubiera alguna forma de hacer esto sin tener que modificar la línea de comandos en sí. Estoy ' seguro de que esto romper de formas interesantes en comandos complejos o de varias líneas, pero no puedo ' encontrar una forma mejor de hacerlo.
  • @ jw013, tienes razón, se rompe para líneas múltiples. Inserta clear; en la salida para cada \n adicional.
  • este consejo es muy bueno gracias !! Necesitaba vincular un código específico a F2, pero algunas veces la línea tiene algún comando que escribí pero no ejecuté, por lo que con este ejemplo: bind "\"\\eOQ\":\"\e[1~ls;#\\n\"" se moverá al principio, escriba ls;# comentando lo que había allí y ejecute el comando ls correctamente. ¡gracias!

Responde

de una pregunta que hice hoy (con crédito para el usuario @aecolley» s answer ):

bind ""\C-m": "\C-l\C-j"" 

La \C-m simulando la tecla «Intro», la \C-l simulando Ctrl+l como está claro y la \C-j es «nueva línea y sangría», por lo que el comando vincula la tecla Intro a Ctrl + l & Ctrl + j

que funciona en GNU bash, versión 3.2.53 (1) -release (x86_64-apple-darwin14) y las otras respuestas en este hilo no lo hacen. Además, esto no contamina el historial con comandos «borrar» todos los demás comandos.

Comentarios

  • nota: si usa sobre ssh, debe ejecutarlo en ese entorno o sucederá algo extraño.
  • funciona en mi terminal ubuntu 16.04, gracias, pero ¿cómo funciona? ¿Podría proporcionar un enlace o documentación por favor?

Responder

Considere borrar solo cuando desee

cb4() { preexec () { clear } } 

Esto usa un gancho llamado preexec, confirmado que también funciona con zsh

Luego, cualquier sesión que desee borrar automáticamente antes de cada comando que ejecute : cb4

Si está seguro de que siempre desea borrar en todos los contextos

preexec () { clear } 

Y si realmente desea restablecer la terminal

reemplace la palabra clear con tput reset

tput es opcional pero acelera el proceso de reinicio

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *