Gostaria de configurar o bash para executar o clear
comando toda vez que digitar algum comando no terminal (antes de executar o meu comando). Como eu posso fazer isso?
Estou usando o Debian Linux.
Gostaria de configurar o bash para executar o clear
comando toda vez que digitar algum comando no terminal (antes de executar o meu comando). Como eu posso fazer isso?
Estou usando o Debian Linux.
Respostas:
O Bash possui um gancho de pré-comando . Tipo de.
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 executar o comando. Funciona assim para mim. O gancho preexec é executado para cada comando interativo, não importa se o comando é um comando interno ou externo ou vários comandos.
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
o problema é que PROMPT_COMMAND está sendo executado e também está preso após o comando real; Também alguém pode me dizer por que local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
está aqui?
history -1
imprime a última linha de comando, com um número de histórico na frente. O filtro sed retira o número do histórico.
bind 'RETURN: "\e[1~clear; \e[4~\n"'
Depois disso, toda vez que você pressionar, em returnvez de apenas escrever, \n
ele passará para o início da linha, digite o texto clear;
, depois vá para o final e digite \n
como esperado.
clear
comandos com comandos.
clear
é executado antes que o comando e a saída do comando não desapareçam. No entanto, no caso de pronto, ele faz.
clear;
na saída para cada extra \n
.
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
ele irá para o início, digite ls;#
comentar o que estava lá e execute o ls
comando corretamente! THX!
de uma pergunta que fiz hoje (com crédito para a resposta do usuário @ aecolley ):
bind '"\C-m": "\C-l\C-j"'
A \C-m
simulação da tecla 'Enter', a \C-l
simulação Ctrl+l
como está clara e \C-j
é "nova linha e recuo", então o comando está vinculando a tecla Enter a Ctrl + l & Ctrl + j
que funciona no GNU bash, versão 3.2.53 (1) -release (x86_64-apple-darwin14) e as outras respostas neste segmento não. Além disso, isso não polui o histórico com comandos 'clear' em todos os outros comandos.