我正在尝试使用Phing构建脚本设置环境变量。通常可以通过命令行执行以下操作:
export MY_VAR=value
在Phing中,我尝试了以下步骤,但是没有起作用。
<exec command="export MY_VAR=value" />
我正在尝试使用Phing构建脚本设置环境变量。通常可以通过命令行执行以下操作:
export MY_VAR=value
<exec command="export MY_VAR=value" />
我看到这是一个相当久远的问题,但我认为它还没有得到最好的回答。如果你想导出一个shell变量,比如说你正在从phing运行phpunit并且想在调用phpunit之前执行一个导出操作,请尝试以下命令:
<exec command="export MY_VAR=value ; /path/to/phpunit" />
只需在同一exec标签中执行导出和命令调用。如所示,使用分号将导出语句和shell可执行文件分开。您的脚本将能够使用标准php函数访问该值:
$myVar = getenv('MY_VAR');
重要声明:在 PHP 中,没有办法设置/导出一个(Unix)shell 变量,以便在启动 php 脚本的范围内可见。
php myfile.php (does putenv or shell_exec('export foo=bar');)
echo $foo
不会返回任何结果。
由于PHP无法实现,因此phing也无法实现。
如果您想要访问跨多个脚本运行的shell环境变量(如果这就是您想要的),这似乎也不是一个理想的设计决策,状态非常复杂。
除此之外,我建议您坚持使用phing并学习它的简单方法。Phing在某种程度上有助于无状态思考。
我以前从未听说过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>
我希望这可以帮到你。