Me gustaría configurar bash para ejecutar el clear
comando 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 clear
comando 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 -1
imprime 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 \n
como se esperaba.
clear
comandos con comandos.
clear
se 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 ls
comando 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-m
simulación de la tecla 'Enter', la \C-l
simulación Ctrl+l
como está clara y \C-j
es "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 clear
contput reset
tput
es opcional pero acelera el proceso de reinicio