JP *_*Lew 4 php unix linux bash
我正在编写一个旨在在远程 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"
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
# 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: "
Run Code Online (Sandbox Code Playgroud)
这两种方法都不起作用,两个变量都返回空。我知道这个 PHP 变量已设置,因为当我将其输入终端时(在 ssh 进入服务器后),我得到了预期值:
$ php -r 'echo $_ENV{DATABASE_SERVER};'
# outputs: "internal-db.s173785.gridserver.com"
Run Code Online (Sandbox Code Playgroud)
从技术上讲,上述方法应该有效,因为我设法在我的脚本中使其正常工作:
php_user=$(php -r 'echo getenv("USER");')
echo php_user is $php_user
# outputs: "php_user is myusername"
Run Code Online (Sandbox Code Playgroud)
有人知道我做错了什么吗?\
***更新*******
我应该提到,我正在从本地计算机调用此脚本,如下所示:
ssh -t user@mydomain.com "myscript backup_remote_db"
Run Code Online (Sandbox Code Playgroud)
“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"
Run Code Online (Sandbox Code Playgroud)
但前提是我对脚本的调用方式进行调整:
ssh -t user@mydomain.com ". /etc/profile; myscript backup_remote_db"
Run Code Online (Sandbox Code Playgroud)
您不需要 php 来在 shell 中获取环境变量
只需打印它:
echo "The DB Host is $DATABASE_SERVER"
Run Code Online (Sandbox Code Playgroud)
对于完整的答案,我认为 php 不起作用,因为您收到通知Use of undefined constant PATH,您应该包装字符串参数。
这应该有效:
v=$(php -r 'print_r(getenv("DATABASE_SERVER"));')
echo "DB: $v"
Run Code Online (Sandbox Code Playgroud)
更新: 使用 SSH 登录时不会获取 .bashrc。您需要在 .bash_profile 中获取它,如下所示:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Run Code Online (Sandbox Code Playgroud)