明明在主機的 /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使用參數(shù)bash -l / --login大审,login狀態(tài)下铐然,bash默認加載/etc/profile和~/.profile文件
nonlogin: 用戶在登錄狀態(tài)下運行的其他shell,讀取/etc/bashrc ~/.bashrc
non-internative & interactive:
interactive:需要通過鍵盤交互戒祠,如 ssh ip "ls -l" 自行exit瓢对,讀取/ect/bashrc ~/.bashrc
non-interactive:可能是自動化進程中運行的子shell跛锌,執(zhí)行完指令直接自動退出為非交互式,自動運行因此最好將輸出寫入日志文件丧诺。非交互式shell通常是非登錄的入桂,因為調用的用戶已經(jīng)登陸了。一些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 來維護一個變量的集合