我正在尝试调用一个shell脚本,该脚本在mercurial钩子上设置我们服务器上的一堆环境变量。当一个新的变更组进入时,shell脚本会被调用,但环境变量不会超过对shell脚本的调用。
我的存储库上的hgrc文件如下所示:
[hooks]
changegroup = shell_script
changegroup.env = env
我可以看到shell脚本的输出,然后是env命令的输出,但是env命令不包含shell脚本设置的新环境变量。
我已经验证了shell脚本在单独运行时工作正常,但是当在mercurial hook的上下文中运行时,它没有正确设置环境。
答案 0 :(得分:2)
Shell脚本无法修改其环境。
http://tldp.org/LDP/abs/html/gotchas.html
脚本可能无法将变量导出回其父进程,shell或环境。正如我们在生物学中所学到的,子进程可以从父进程继承,但反之亦然
$ cat > eg.sh
export FOO="bar";
^D
$ bash eg.sh
$ echo $FOO;
$
另外,问题更大,因为您有多次调用bash
bash 1 -> hg -> bash 2 ( shell script )
-> bash 3 ( env call )
这就像是在想我可以在一个PHP脚本中设置一个变量,然后通过一个接一个地运行一个神奇地让它与另一个。