【问题标题】:Setting Environment Variables for Mercurial Hook为 Mercurial Hook 设置环境变量
【发布时间】:2008-09-17 22:05:56
【问题描述】:

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

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

[hooks]
changegroup = shell_script
changegroup.env = env

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

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

【问题讨论】:

    标签: python shell mercurial mercurial-hook


    【解决方案1】:

    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 脚本中设置一个变量,然后通过一个接一个地运行而神奇地与另一个脚本一起获取它。

    【讨论】:

    • 他说脚本在自己运行时有效,这似乎很奇怪
    • 我相当肯定 shell 脚本,这是一个巨大且极其复杂的启动一个新的 shell 进程,所以这可能是我感到困惑的地方,它实际上并没有在父进程中设置它们,只是它创建的那个,然后被终止
    猜你喜欢
    • 2015-09-03
    • 2013-01-29
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2014-12-17
    • 2020-02-14
    • 2013-01-11
    相关资源
    最近更新 更多