Eu tenho um mecanismo complicado incorporado no meu ambiente bash que requer a execução de alguns scripts quando o prompt é gerado, mas também quando o usuário pressiona enter para iniciar o processamento de um comando. Vou dar uma descrição simplificada:
A armadilha de depuração faz isso de uma maneira bastante limitada: é acionada toda vez que uma instrução é executada.
trap 'echo $BASH_COMMAND' DEBUG # example only
Infelizmente, isso significa que quando eu digito isso:
sleep 1; sleep 2; sleep 3
em vez de processar um $ BASH_COMMAND que contém toda a linha, recebo os três dormes em três armadilhas diferentes. Pior ainda:
sleep 1 | sleep 2 | sleep 3
aciona os três enquanto o tubo é configurado - antes que o sono 1 comece a ser executado, a saída pode levar você a acreditar que o sono 3 está em execução.
Preciso de uma maneira de executar um script logo no início, processando o comando inteiro, e prefiro que não seja acionado quando o comando prompt for executado, mas posso lidar com isso se for necessário.
fonte
Respostas:
Não é muito bonito, mas se você realmente precisar disso, poderá usar
PROMPT_COMMAND
além da armadilha de depuração para se livrar das chamadas extras:Agora:
No entanto, ainda não temos acesso a toda a linha de entrada:
$BASH_COMMAND
é justoecho 1
.Outra idéia inspirada neste artigo é usar as ligações readline para obter acesso a toda a linha:
Agora funciona:
Porém, um aspecto a ter em mente: para entrada em várias linhas, será invocado uma vez para cada linha que pode não ser o que você deseja (poderia usar uma combinação de ambas as abordagens).
fonte