Comment appeler un script après chaque commande bash

22

Est-il possible d'appeler un script dans cet exemple nommé hey.shaprès chaque commande bash?

Par exemple, vous tapez lshit enter et ls runs, puis hey.shserait exécuté.

Vous tapez ensuite cd .. (ou toute autre commande) , puis le cd hey.shs'exécute, et ainsi de suite.

John
la source
2
C'est soit un problème XY, soit une idée très étrange; qu'essayez-vous réellement de réaliser?
jasonwryan
alias dans bash.rc peut-être?
moonbutt74

Réponses:

29
PROMPT_COMMAND+="hey.sh;"

PROMPT_COMMAND Si défini, la valeur est exécutée en tant que commande avant d'émettre chaque invite principale.


Remarque: Variables d'environnement vs variables de shell

Par défaut, PROMPT_COMMANDn'est pas une variable d'environnement . C'est juste une variable shell .

Les deux types de variables sont accessibles de la même manière ( "$variable*"), mais les variables d'environnement sont héritées par les processus enfants, contrairement aux variables shell .

La convention consiste à capitaliser les variables d'environnement + les variables de shell qui configurent votre shell (PROMPT_COMMAND configure votre shell), mais gardez les autres types de variables en minuscules.

En bash , vous pouvez faire: declare -ppour savoir si une variable est exportée (= est une variable d'environnement) ou non:

$ 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
la source
2
@John Non. Ne le fais pas export. Réglez-le simplement (ou ajoutez-le, par exemple, comme indiqué ci-dessus).
PSkocik
Bien, et après?
moonbutt74
2
@ moonbutt74 avant chaque commande == après chaque commande + au début de votre session bash
PSkocik
@PSkocik I gotcha J'étais juste curieux de savoir si c'était déjà une variable environnementale, sur une commande d'écho rapide, j'ai découvert que c'était le cas. Cela fait exactement ce que je cherchais
John
@John Par défaut, c'est juste une variable shell et non une variable d'environnement.
PSkocik