Cómo llamar a un script después de cada comando bash

22

¿Es posible llamar a un script en este ejemplo con el nombre de hey.shcada comando bash?

Por ejemplo, escribe lshit enter y ls ejecuta, luego hey.shse ejecutará.

Luego escribe cd .. (o cualquier otro comando) , el CD se ejecuta y luego hey.shse ejecuta, y así sucesivamente.

John
fuente
2
Este es un problema XY o una idea muy extraña; ¿Qué estás tratando de lograr realmente?
jasonwryan
alias en bash.rc tal vez?
moonbutt74

Respuestas:

29
PROMPT_COMMAND+="hey.sh;"

PROMPT_COMMAND Si se establece, el valor se ejecuta como un comando antes de emitir cada solicitud primaria.


Nota: Variables de entorno frente a variables de shell

Por defecto, noPROMPT_COMMAND es una variable de entorno . Es solo una variable de shell .

Se accede a ambos tipos de variables de la misma manera ( "$variable*"), pero los procesos secundarios heredan las variables de entorno , mientras que las variables de shell no.

La convención es capitalizar las variables de entorno + variables de shell que configuran su shell (PROMPT_COMMAND configura su shell), pero mantienen en minúscula otros tipos de variables.

En bash , puede hacer: declare -ppara averiguar si una variable se exporta (= es una variable de entorno) o 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
PSkocik
fuente
2
@ John No. No lo hagas export. Simplemente configúrelo (o añádalo, por ejemplo, como se muestra arriba).
PSkocik
Neat, ¿qué pasa después?
moonbutt74
2
@ moonbutt74 antes de cada comando == después de cada comando + al comienzo de su sesión de bash
PSkocik
@PSkocik Lo tengo. Tenía curiosidad de saber si eso ya era una variable ambiental, luego de un comando de eco rápido descubrí que sí. Esto hace exactamente lo que estaba buscando
John
@ John Por defecto, es solo una variable de shell, no una variable de entorno.
PSkocik