【发布时间】:2018-06-27 07:01:02
【问题描述】:
从本地 Ubuntu 系统在远程服务器上执行脚本时,如何从远程 Ubuntu 服务器获取环境变量?我在不同的文件中为 vagrant 用户配置了很多环境变量。
我使用以下命令从本地 Ubuntu 系统执行脚本
sshpass -f .passwd ssh -o StrictHostKeyChecking=no -t vagrant@192.168.1.180 "sh script.sh"
.passwd 文件包含密码
执行此脚本时,配置的环境变量不可用于脚本执行。我已经使用此命令获取了配置文件、 .bash_profile 、 /etc/profile 等,例如
sshpass -f .passwd ssh -o StrictHostKeyChecking=no -t vagrant@192.168.1.180 "source .bash_profile; sh script.sh"
请帮我解决这个问题。
注意:环境变量在直接 ssh 会话和脚本上也可以正常工作。
【问题讨论】:
-
source .bash_profile; sh script.sh运行一个不是 Bash 并且在子进程中运行的 shell,这意味着任何已设置但未导出的变量对脚本不可见。也许你想要exec而不是sh?或者你想要的变量可能实际上并没有在远程服务器上的vagrant用户的$HOME/.bash_profile中定义? -
注意:环境变量在直接 ssh 会话和脚本上也可以正常工作。
-
您的问题已经说明了这一点。现在你能回答我问的后续问题吗?
.bash_profile中定义的所有变量还是它无条件获取的文件?变量是否导出?您希望脚本由 Bash 还是由sh运行,如果是前者,您已经在运行的实例,还是另一个? -
所有变量都在
.bash_profile中定义,并在远程服务器中导出。我的大部分脚本都在 bash 中,因此最好为 bash 找到解决方案。 -
exec对你有用吗?
标签: linux bash shell ubuntu ssh