Me gustaría configurar bash para ejecutar el clearcomando cada vez que escriba algún comando en la terminal (antes de ejecutar mi comando). ¿Cómo puedo hacer eso?
Estoy usando Debian Linux.
Me gustaría configurar bash para ejecutar el clearcomando cada vez que escriba algún comando en la terminal (antes de ejecutar mi comando). ¿Cómo puedo hacer eso?
Estoy usando Debian Linux.
Respuestas:
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
Enter, antes de ejecutar el comando. Funciona así para mí. El enlace preexec se ejecuta para cada comando interactivo, no importa si el comando es un comando incorporado o externo o muchos comandos.
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;el problema es que PROMPT_COMMAND se está ejecutando y también está atrapado después del comando real; También, ¿alguien puede decirme por qué local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;está aquí?
history -1imprime la última línea de comando, con un número de historial al frente. El filtro sed elimina el número del historial.
bind 'RETURN: "\e[1~clear; \e[4~\n"'
Después de eso, cada vez que presiona en returnlugar de simplemente escribir \n, se moverá al comienzo de la línea, ingrese el texto clear;, luego vaya al final e ingrese \ncomo se esperaba.
clearcomandos con comandos.
clearse ejecuta antes de que el comando y la salida del comando no desaparezcan. Sin embargo, en caso de aviso, lo hace.
clear;en la salida para cada extra \n.
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""se moverá al principio, escriba ls;#comentando lo que estaba allí y ejecutará el lscomando correctamente. ¡Gracias!
de una pregunta que hice hoy (con crédito a la respuesta del usuario @ aecolley ):
bind '"\C-m": "\C-l\C-j"'
La \C-msimulación de la tecla 'Enter', la \C-lsimulación Ctrl+lcomo está clara y \C-jes "nueva línea y sangría", por lo que el comando vincula la tecla Enter a Ctrl + l & Ctrl + j
eso 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 'claros' en cualquier otro comando.
cb4() {
preexec () {
clear
}
}
Esto usa un gancho llamado preexec, confirmado funciona con zsh también
Luego, cualquier sesión que desee borrar automáticamente antes de cada comando que ejecute: cb4
preexec () {
clear
}
reemplazar la palabra clearcontput reset
tput es opcional pero acelera el proceso de reinicio