Como chamar um script após cada comando bash

22

É possível chamar um script neste exemplo com o hey.shnome de cada comando bash?

Por exemplo, você digita lshit enter e ls runs, então hey.shseria executado.

Em seguida, você digita cd .. (ou qualquer outro comando) , o cd é hey.shexecutado e assim por diante.

John
fonte
2
Este é um problema XY ou uma ideia muito estranha; o que você está realmente tentando alcançar?
jasonwryan
alias em bash.rc talvez?
moonbutt74

Respostas:

29
PROMPT_COMMAND+="hey.sh;"

PROMPT_COMMAND Se definido, o valor é executado como um comando antes da emissão de cada prompt primário.


Nota: Variáveis ​​de ambiente versus variáveis ​​de shell

Por padrão, nãoPROMPT_COMMAND é uma variável de ambiente . É apenas uma variável de shell .

Os dois tipos de variáveis ​​são acessados ​​da mesma maneira ( "$variable*"), mas as variáveis ​​de ambiente são herdadas pelos processos filhos, enquanto as variáveis ​​do shell não são.

A convenção é capitalizar variáveis ​​de ambiente + variáveis ​​de shell que configuram seu shell (PROMPT_COMMAND configura seu shell), mas mantém outros tipos de variáveis ​​em minúsculas.

No bash , você pode: declare -pdescobrir se uma variável é exportada (= é uma variável de ambiente) ou não:

$ declare -p PATH
declare -x PATH=... #-x means it's exported
$ declare PROMPT_COMMAND
declare -- PROMPT_COMMAND=... #no -x so just a shell variable
PSkocik
fonte
2
@ John No. Não faça exportisso. Basta configurá-lo (ou anexá-lo, por exemplo, como mostrado acima).
PSKocik
Legal, e depois?
moonbutt74
2
@ moonbutt74 antes de cada comando == após cada comando + no início da sua sessão de festa
PSkocik
@PSkocik Entendi, fiquei curioso para saber se essa já é uma variável ambiental, depois de um comando de eco rápido, descobri que era. Isto faz exatamente o que eu estava procurando
John
@ John Por padrão, é apenas uma variável de shell e não uma variável de ambiente.
PSKocik