Come chiamare uno script dopo ogni comando bash


22

In questo esempio è possibile chiamare uno script che prende il nome hey.shda ogni comando bash?

Ad esempio, digitare lshit invio e ls corre, quindi hey.shverrebbe eseguito.

Quindi digitate cd .. (o qualsiasi altro comando) , quindi hey.shverrebbe eseguito il cd e così via.


2
Questo è un problema XY o un'idea molto strana; cosa stai cercando di ottenere davvero?
Jasonwryan,

alias in bash.rc forse?
moonbutt74,

Risposte:


29
PROMPT_COMMAND+="hey.sh;"

PROMPT_COMMAND Se impostato, il valore viene eseguito come comando prima di emettere ciascun prompt primario.


Nota: variabili di ambiente vs variabili di shell

Per impostazione predefinita, nonPROMPT_COMMAND è una variabile di ambiente . È solo una variabile di shell .

Entrambi i tipi di variabili sono accessibili allo stesso modo ( "$variable*"), ma le variabili di ambiente sono ereditate da processi figlio mentre le variabili di shell non lo sono.

La convenzione prevede di capitalizzare le variabili di ambiente + le variabili di shell che configurano la shell (PROMPT_COMMAND configura la shell), ma mantiene gli altri tipi di variabili in minuscolo.

In bash , puoi fare: declare -pper scoprire se una variabile viene esportata (= è una variabile d'ambiente) oppure no:

$ declare -p PATH
declare -x PATH=... #-x means it's exported
$ declare PROMPT_COMMAND
declare -- PROMPT_COMMAND=... #no -x so just a shell variable

2
@Giovanni No. Non exportfarlo. Basta impostarlo (o aggiungerlo ad esempio, come mostrato sopra).
PSkocik,

Bene, e dopo?
moonbutt74,

2
@ moonbutt74 prima di ogni comando == dopo ogni comando + all'inizio della sessione bash
PSkocik

@PSkocik I gotcha Ero solo curioso di sapere se quella era già una variabile ambientale, su un rapido comando di eco ho scoperto che lo era. Questo fa esattamente quello che stavo cercando
John

@John Per impostazione predefinita, è solo una variabile di shell, non una variabile di ambiente.
PSkocik,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.