7

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

export MY_VAR=value

在 Phing 中,我做了以下操作,但它不起作用。

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

3 回答 3

10

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

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

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

$myVar = getenv('MY_VAR');
于 2014-07-15T13:35:41.597 回答
6

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

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

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

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

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

于 2011-04-28T13:40:39.357 回答
4

我以前从未听说过 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-04-27T13:58:26.287 回答