2014-05-08 102 views
4

我正在寫一個bash腳本,用於在遠程AMP堆棧上運行。該腳本需要訪問PHP預定義的環境變量($ _ENV)。如何在bash腳本中訪問PHP環境變量?

這就是我想要的:

db_host=$(php -r 'echo $_ENV{DATABASE_SERVER};') 
echo "The DB Host is: $db_host" 
# output: "The DB Host is: internal-db.s173785.gridserver.com" 

這是我所得到的,而不是:

# METHOD 1 
db_host1=$(php -r 'echo $_ENV{DATABASE_SERVER};') 
echo "The DB Host is: $db_host1" 
# output: "The DB Host is: " 

# METHOD 2 
db_host2=`php -r 'echo get_env(DATABASE_SERVER);'` 
echo "The DB Host is: $db_host2" 
# output: "The DB Host is: " 

這兩種方法都有效,這兩個變量返回空。我知道,這個PHP變量設置,因爲當我鍵入此爲終端(ssh'ing到服務器後),我得到的預期值:

$ php -r 'echo $_ENV{DATABASE_SERVER};' 
# outputs: "internal-db.s173785.gridserver.com" 

技術上上面的方法應該工作,因爲我管理得到這個工作在我的腳本:

php_user=$(php -r 'echo getenv("USER");') 
echo php_user is $php_user 
# outputs: "php_user is myusername" 

任何人都知道我做錯了\

*** UPDATE *******

我要指出,我從我的本地機器上調用這個腳本,像這樣:

ssh -t [email protected] "myscript backup_remote_db" 

「的MyScript」是我的可執行bash腳本的名稱,而「backup_remote_db」是我傳遞給它的功能,包含上面的代碼。

,這可能不是然而引起,因爲當我贊同在腳本$ USER,這呼應了遠程用戶,而不是本地一個...

***更新2 ******

下面是我終於得到它的工作:

db_host=$DATABASE_SERVER 
echo "The DB Host is $db_host" 
# output: "The DB Host is: internal-db.s173785.gridserver.com" 

但是,只有當我做出這個調整腳本調用方式:

ssh -t [email protected] ". /etc/profile; myscript backup_remote_db" 
+0

什麼打印'echo $ DATABASE_SERVER'? –

+0

我得到internal-db.s173785.gridserver.com !!輝煌 –

+0

你不需要PHP來獲取你的shell中的環境變量 –

回答

4

你並不需要獲取環境變量的PHP在你的shell

只是打印:

echo "The DB Host is $DATABASE_SERVER" 

而對於完整的答案,我想,那PHP不會因爲你得到工作的通知Use of undefined constant PATH,你應該包裝你的字符串參數。
這應該工作:

v=$(php -r 'print_r(getenv("DATABASE_SERVER"));') 
echo "DB: $v" 

更新:在您登錄時使用SSH 的.bashrc不採購。你需要像這樣在你的.bash_profile中找到它:

if [ -f ~/.bashrc ]; then 
    . ~/.bashrc 
fi 
+0

在'bash'的'echo'中使用單引號時,'$ v'沒有被解釋(它打印'DB:$ v'),而用雙引號則打印出預期的輸出。 – DanFromGermany

+0

不幸的是,這不是爲我工作,'V'仍然空白 –

+0

@DanFromGermany,對不起,你是對的:) –