2014-05-08 78 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,对不起,你是对的:) –