我正在编写一个旨在运行在远程AMP堆栈上的Bash脚本。该脚本需要访问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"
请问我做错了什么?
***更新*****
需要说明的是,我是从本地机器上调用此脚本的:
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"
DATABASE_SERVER
最初是在哪里设置的? 是否在您的.bashrc
中? - Ja͢ck/etc/profile
吧?它一定在某个地方 :) - Ja͢ck. /etc/bash.bashrc
,然后就可以使用$DATABASE_SERVER
了。 - Ja͢ck