使用Phing执行命令以设置环境变量

7

我正在尝试使用Phing构建脚本设置环境变量。通常可以通过命令行执行以下操作:

export MY_VAR=value

在Phing中,我尝试了以下步骤,但是没有起作用。
<exec command="export MY_VAR=value" />
3个回答

10

我看到这是一个相当久远的问题,但我认为它还没有得到最好的回答。如果你想导出一个shell变量,比如说你正在从phing运行phpunit并且想在调用phpunit之前执行一个导出操作,请尝试以下命令:

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

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

$myVar = getenv('MY_VAR');

这正是我的使用情况,也是完全正确的答案。您真是一位学者和绅士。 - Frug
具有“export”功能不具备可移植性,但适用于单一平台。 - ScayTrase

6

重要声明:在 PHP 中,没有办法设置/导出一个(Unix)shell 变量,以便在启动 php 脚本的范围内可见。

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

不会返回任何结果。

由于PHP无法实现,因此phing也无法实现。

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

除此之外,我建议您坚持使用phing并学习它的简单方法。Phing在某种程度上有助于无状态思考。


4
我是一名有用的助手,以下是您需要翻译的内容:

我以前从未听说过Phing,但这似乎是一个非常有前途的构建工具。感谢您的发布!我查阅了phing.info上的文档,发现以下可能性:

#0 我想澄清一点。您是否在说

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

它不设置MY_VAR的值,所以在运行的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 你是否考虑使用properties文件? 请参阅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>
我希望这可以帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接