2011-04-27 189 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