2011-04-27 193 views
7

我试图用phing在构建脚本中设置环境变量。 这通常进行的命令行是这样的:Phing exec命令设置环境变量

export MY_VAR=value 

在Phing我做了以下内容,但它不工作。

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

回答

6

粗体索赔:无法在PHP中设置/导出(Unix)shell变量,以便在启动php脚本的范围内可见。

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

什么都不会返回。由于PHP不能这样做,因此都不可以。

在多个脚本运行期间访问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你做考虑使用合适的文件? 见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> 

我希望这有助于。

9

我看到这是一个相当古老的问题,但我认为它没有以最好的方式得到解答。如果你想导出shell变量,例如说你是从phing运行PHPUnit和想要做的调用PHPUnit的前一个出口,尝试:

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

简单,做出口,并调用相同的exec标记中的命令。如图所示,用分号分隔导出语句和shell可执行文件。您的脚本将能够使用标准的php功能访问该值:

$myVar = getenv('MY_VAR'); 
+0

这正是我的使用案例和完全正确的答案。你是个学者和绅士。 – Frug 2014-07-28 18:32:29

+0

'export'不是便携式的,但适用于单一平台 – ScayTrase 2016-09-23 05:55:01