Domanda

Sto provando a chiamare uno script di shell che imposta una serie di variabili di ambiente sul nostro server da un hook mercuriale.Lo script di shell viene chiamato correttamente quando arriva un nuovo changegroup, ma le variabili di ambiente non vengono trasferite oltre la chiamata allo script di shell.

Il mio file hgrc sul repository assomiglia a questo:

[hooks]
changegroup = shell_script
changegroup.env = env

Posso vedere l'output dello script di shell e quindi l'output del comando env, ma il comando env non include le nuove variabili di ambiente impostate dallo script di shell.

Ho verificato che lo script della shell funziona correttamente se eseguito da solo, ma se eseguito nel contesto dell'hook mercuriale non imposta correttamente l'ambiente.

È stato utile?

Soluzione

Gli script di shell non possono modificare il proprio ambiente.

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

Uno script non può esportare le variabili nel processo genitore, nella shell o nell'ambiente.Proprio come abbiamo imparato in biologia, un processo figlio può ereditare da un genitore, ma non viceversa

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

$

inoltre, il problema è maggiore, poiché hai più chiamate di bash

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

sarebbe come pensare di poter impostare una variabile in uno script php e poi magicamente ottenerla con un altro semplicemente eseguendo uno dopo l'altro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top