我正在尝试使用phing在构建脚本中设置环境变量。 这通常是这样完成的命令行:
export MY_VAR=value
在Phing中我做了以下但是没有用。
<exec command="export MY_VAR=value" />
答案 0 :(得分:9)
我看到这是一个很老的问题,但我认为它没有以最好的方式得到回答。如果你想导出一个shell变量,比如说你从phing运行phpunit并想在调用phpunit之前进行导出,试试:
<exec command="export MY_VAR=value ; /path/to/phpunit" />
只需执行导出并在同一个exec标记内调用您的命令。如图所示,使用分号分隔export语句和shell可执行文件。您的脚本将能够使用标准的php函数访问该值:
$myVar = getenv('MY_VAR');
答案 1 :(得分:6)
粗体声明: 无法在PHP中设置/导出(Unix)shell变量,以便在启动php脚本的范围内可见。
php myfile.php (does putenv or shell_exec('export foo=bar');)
echo $foo
什么都不会回报。 由于PHP无法做到这一点所以也无法发表。
在多个脚本运行中访问shell环境变量(如果它是你想要的那样)似乎也是一个不理想的设计决策,非常有状态。
除此之外,我敦促你坚持学习并学习精益课程。 Phing在某种程度上帮助无国籍思考。
答案 2 :(得分: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>
我希望这会有所帮助。