ssh 远程执行脚本获取不到java变量

明明在主机的 /etc/profile上配置了 JAVA_HOME
但是当通过

[root@jenkins fkwyrepo]# ssh -p11151 111.1x7.xxx.xxx "echo $JAVA_HOME"
/data/apps/jdk1.8.0_161
[root@jenkins fkwyrepo]# 
[root@jenkins fkwyrepo]# 
[root@jenkins fkwyrepo]# 
[root@jenkins fkwyrepo]# ssh -p11151 111.1x7.xxx.1x1 "sh /root/ce.sh"

[root@jenkins fkwyrepo]# 
[root@fkwy-restful ~]# cat ce.sh 
echo $JAVA_HOME

为什么写到脚本中就获取不到变量了 这就需要从bash的4中登录方式来说了
bash有四种登录方式:

login
non-login
interactive
non-interactive

login & non-login:
login:在输入了账号密码的情况,或者打开bash使用参数bash -l / --login,login状态下,bash默认加载/etc/profile和~/.profile文件
nonlogin: 用户在登录状态下运行的其他shell,读取/etc/bashrc ~/.bashrc

non-internative & interactive:
interactive:需要通过键盘交互,如 ssh ip "ls -l" 自行exit,读取/ect/bashrc ~/.bashrc
non-interactive:可能是自动化进程中运行的子shell,执行完指令直接自动退出为非交互式,自动运行因此最好将输出写入日志文件。非交互式shell通常是非登录的,因为调用的用户已经登陆了。一些shell会读取$ENV,不会读取bahsrc和profile

ssh ip "sh xxx.sh" 是non-login non-internative 所以不会读取 /etc/profile文件 只会读取 ~/.bashrc /etc/bashrc /etc/profile.d/
所以我们需要把变量卸载 ~/.bashrc 如果有大量的变量 可以放到 /etc/profile.d/env.sh 来维护一个变量的集合

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容