#!/bin/bash source /etc/profile for host in hadoop102 hadoop103 hadoop104 do echo ------------------- $host -------------- ssh $host $@ done
此为集群间的群起脚本 ,调用时却发现
出现问题的原因解析:
首先shell分为LoginShell和NoLoginShell
LoginShell: 登录后,提供了一个shell的bash界面,此时就属于loginshell
NoLoginShell: 登录后,没有提供一个可以输入命令的bash界面!
区别: 登录后执行脚本的顺序和脚本不同
这种Login shell 执行脚本的顺序: 1. /etc/profile 【全局profile文件;它定义了LoginUser的 PATH, USER, LOGNAME(登录使用者帐号)】 2. /etc/profile.d/目录下的脚本 3. ~/.bash_profile 【搜索命令的路径 ————- 登录级别 环境变量配置文件 】 4. ~/.bashrc 【存储用户设定的别名和函数 ———- shell级别 环境变量配置文件】 5. /etc/bashrc 【全局bashrc文件; 它主要定义一些 Function 和 Alias;更改/etc/bashrc会影响到所有用户,由root用户管理。】
Non-Login shell 登录终端后,使用ssh 登录 其他机器! 非登录shell指的是,不需要输入用户名密码的shell,如图形下 右键terminal,或ctrl+shift+T打开的shell 这种Non-Login shell 执行登录脚本的顺序: 1. ~/.bashrc 2. /etc/bashrc 3. /etc/profile.d/目录下的脚本
脚本这种方式明显是 NologinShell。
而我的JAVA_HOME是配置在/etc/profile中,这种启动模式根本不会去调用,所以需要在上面的脚本中添加上一句
source /etc/profile
#!/bin/bash source /etc/profile for host in hadoop102 hadoop103 hadoop104 do echo ------------------- $host -------------- ssh $host "source /etc/profile;$@" done
解决方案二:
cat /etc/profile >> ~/.bashrc