如何在bash脚本中访问PHP环境变量?

时间:2014-05-08 11:30:46

标签: php linux bash unix

我正在写一个bash脚本,意味着在远程AMP堆栈上运行。该脚本需要访问PHP预定义的环境变量($ _ENV)。

这就是我想要的:

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进入服务器之后),我得到了预期的值:

$ 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 user@mydomain.com "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 user@mydomain.com ". /etc/profile; myscript backup_remote_db"

1 个答案:

答案 0 :(得分: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