1

我正在尝试调用一个 shell 脚本,该脚本通过一个 mercurial 钩子在我们的服务器上设置一堆环境变量。当一个新的变更组进来时,shell 脚本会被很好地调用,但是环境变量并没有传递到对 shell 脚本的调用。

我在存储库上的 hgrc 文件如下所示:

[hooks]
changegroup = shell_script
changegroup.env = env

我可以看到 shell 脚本的输出,然后是 env 命令的输出,但是 env 命令不包含 shell 脚本设置的新环境变量。

我已经验证了 shell 脚本在单独运行时可以正常工作,但是在 mercurial 钩子的上下文中运行时,它没有正确设置环境。

4

1 回答 1

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 脚本中设置一个变量,然后只需通过一个接一个地运行就可以神奇地得到另一个。

于 2008-09-17T22:09:08.617 回答