明明在主机的 /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 来维护一个变量的集合