我正在使用AWS Beanstalk,以防它可能与问题相关。
我遇到的问题是,当我从我的本地终端:
ssh mozart-api printenv
我忽略了大多数环境变量,如果我这样做:
ssh mozart-api
. .等待打开…
printenv
我得到了我所期望的所有环境变量。
一开始我以为这可能是服务器上的ssh配置,但没有发现任何奇怪的地方。
如果我这样做:
ssh mozart-api "export hello=123 && echo $hello"
则输出123,这意味着变量可以设置和查询,但是我只是无法从服务器获得现有的变量。
这会导致一个问题,因为我正在准备一个脚本,该脚本将在此服务器上运行ssh命令,但由于没有加载变量,项目无法打开数据库。
我尝试用一行重新导入它们:
ssh mozart-api "sudo chmod +777 /etc/profile.d/sh.local && (/opt/elasticbeanstalk/bin/get-config environment | jq -r 'keys[] as $k | "echo export ($k)=(.[$k])"') > /etc/profile.d/sh.local && printenv"
但是仍然看不到新添加的变量。
ssh mozart-api
执行一个登录shell,它可能提供一个或多个定义环境变量的文件。
ssh mozart-api printenv
执行printenv
而不是登录shell的,因此您看到的唯一变量是从父进程继承的变量,而不是shell配置文件中定义的任何变量。