使用phing exec命令设置环境变量

| 我正在尝试通过phing在构建脚本中设置环境变量。 通常是这样在命令行完成的:
export MY_VAR=value
在Phing中,我执行了以下操作,但没有用。
<exec command=\"export MY_VAR=value\" />
    
已邀请:
大胆的主张:无法在PHP中设置/导出(Unix)shell变量,以使其在启动php脚本的作用域内可见。
php myfile.php (does putenv or shell_exec(\'export foo=bar\');)
echo $foo
什么也不会返回。 由于PHP无法做到,因此无法进行phing。 跨多个脚本运行访问shell环境变量(如果您想要的话)似乎也是一个不理想的设计决定,非常有状态。 除此之外,我敦促您坚持phing并学习精益课程。 Phing在某种程度上有助于无状态思考。     
我看到这是一个很老的问题,但是我认为这并不是最好的答案。例如,如果要导出shell变量,例如说您正在通过phing运行phpunit,并且想要在调用phpunit之前进行导出,请尝试:
<exec command=\"export MY_VAR=value ; /path/to/phpunit\" />
只需执行导出并在同一exec标记内调用命令即可。如图所示,用分号分隔export语句和shell可执行文件。您的脚本将能够使用标准php函数访问该值:
$myVar = getenv(\'MY_VAR\');
    
我以前从未听说过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您是否考虑使用属性文件? 参见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>
我希望这有帮助。     

要回复问题请先登录注册