Question

J'essaie d'appeler un script shell qui définit un groupe de variables d'environnement sur notre serveur à partir d'un hook mercurial. Le script shell est appelé correctement lorsqu'un nouveau groupe de changements entre en jeu, mais les variables d'environnement ne sont pas transférées au-delà de l'appel du script shell.

Mon fichier hgrc sur le référentiel ressemble à ceci:

[hooks]
changegroup = shell_script
changegroup.env = env

Je peux voir la sortie du script shell, puis la sortie de la commande env, mais la commande env n'inclut pas les nouvelles variables d'environnement définies par le script shell.

J'ai vérifié que le script shell fonctionne correctement lorsqu'il est exécuté seul, mais lorsqu'il est exécuté dans le contexte du hook mercurial, il ne définit pas l'environnement correctement.

Était-ce utile?

La solution

Les scripts de shell ne peuvent pas modifier leur environnement.

http://tldp.org/LDP/abs/html/gotchas.html

  

Un script ne peut pas exporter de variables vers son processus parent, le shell ou l'environnement. Comme nous l'avons appris en biologie, un processus enfant peut hériter d'un parent, mais pas l'inverse

$ cat > eg.sh 
export FOO="bar";
^D
$ bash eg.sh 
$ echo $FOO; 

$

aussi, le problème est plus grave, car vous avez plusieurs appels de bash

bash 1 -> hg -> bash 2 ( shell script ) 
             -> bash 3 ( env call )

ce serait comme si je pouvais définir une variable dans un script php et l’obtenir comme par magie avec une autre simplement en exécutant les unes après les autres.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top