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, escribals;#
comentando lo que había allí y ejecute el comandols
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