【问题标题】:Phing exec command to set environment variablePhing exec 命令设置环境变量
【发布时间】:2011-04-27 13:23:29
【问题描述】:

我正在尝试使用 phing 在构建脚本中设置环境变量。 这通常是这样完成的命令行:

export MY_VAR=value

在 Phing 中,我执行了以下操作,但没有成功。

<exec command="export MY_VAR=value" />

【问题讨论】:

    标签: command-line environment-variables exec phing


    【解决方案1】:

    我看到这是一个相当古老的问题,但我认为它没有得到最好的回答。如果你想导出一个 shell 变量,例如你正在从 phing 运行 phpunit,并想在调用 phpunit 之前进行导出,试试:

    <exec command="export MY_VAR=value ; /path/to/phpunit" />
    

    只需执行导出并在同一个 exec 标记内调用您的命令。如图所示,用分号分隔导出语句和 shell 可执行文件。您的脚本将能够使用标准 php 函数访问该值:

    $myVar = getenv('MY_VAR');
    

    【讨论】:

    • 这正是我的用例,也是正确的答案。你是一个学者,一个绅士。
    • 拥有export 不便携,但适合单平台
    【解决方案2】:

    大胆声明: 无法在 PHP 中设置/导出 (Unix) shell 变量,以便它在启动 php 脚本的范围内可见。

    php myfile.php (does putenv or shell_exec('export foo=bar');)
    echo $foo
    

    不会返回任何内容。 由于 PHP 做不到,所以 phing 也做不到。

    跨多个脚本运行访问 shell 环境变量(如果它是您想要的)似乎也是一个不理想的设计决策,非常有状态。

    除此之外,我还敦促您坚持使用 phing 并学习其精益课程。 Phing 在一定程度上有助于无状态思维。

    【讨论】:

      【解决方案3】:

      我以前从未听说过 phing,但它作为构建工具看起来很有前途。感谢您的发布!我查看了 phing.info 上的文档,发现了以下可能性:

      #0 我想澄清一点。你在说吗

      prompt$ > export MY_VAR=value
      prompt$ > phing build.xml
      

      没有将 MY_VAR 设置为 value,以便在运行的 phing 进程中可见?我会感到惊讶,但如果这不是您想要运行构建脚本的方式,我会理解。

      #1 我认为在构建工具的上下文中,像 exec 这样的功能旨在运行一个独立的程序,因此,虽然 exec 可以运行并设置 MY_VAR,但这一切都发生在一个立即消失的子进程中随着 exec 完成并继续处理 build.xml 中的下一个任务。

      如果您只是想确保您的 phing 脚本使用 env_vars 的特定值运行,您可以尝试

      Command-line arguments:
      ....
      -D<property>=<value>    
        // Set the property to the specified value to be used in the buildfile
      

      所以想必你可以做到

      phing -DMY_VAR=value build.xml
      

      #2 你考虑过使用properites 文件吗? 见http://www.phing.info/docs/guide/stable/chapters/appendixes/AppendixF-FileFormats.html 并向下滚动以获取有关 build.properties 的信息

      #3 也...

      Phing Built-In Properties
      Property    Contents
          env.*   Environment variables, extracted from $_SERVER.
      

      你可以通过类似的方式访问它们

       ${env.MY_VAR}
      

      #4 这看起来更接近你真正想要的

      <replacetokens>
        <token key="BC_PATH" value="${top.builddir}/"/>
        <token key="BC_PATH_USER" value="${top.builddir}/testsite/user/${lang}/"/>
      </replacetokens>
      

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-25
        • 2012-10-19
        • 1970-01-01
        相关资源
        最近更新 更多