起因是这样的:
公司新方案考虑使用docker
, 看到有个进入容器的快捷命令是这样实现的
wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc;
公司服务器需要配置JAVA_HOME
环境变量,每次都要手动处理,而且操作系统及JAVA版本可能不一样,于是乎按以上思路写了个~/.bashrc_customer
# get the real path of a soft link command.
function read_link {
[ "$1" == "" ] && echo "A command option should be supplied!"
[ "$1" == "" ] && exit 1
[ -x /bin/readlink ] || sudo yum -y install coreutils
[ -x /usr/bin/which ] || audo yum -y install which
if [ ! -x /bin/readlink -o ! -x /usr/bin/which ]; then
echo "Command 'readlink' or which not found and failed to install 'coreutils' or 'which' by 'sudo yum -y install'!"
exit 1
fi
cmd=$(which $1)
[ -L "$cmd" ] && cmd=$(readlink $cmd)
[ -L "$cmd" ] && cmd=$(read_link $cmd)
echo $cmd
}
# JAVA ENV
function java_home {
java_bin=$(read_link java)
java_home=$(read_link java|sed 's#/bin/java##g')
cat <<JAVA
# JAVA_ENV
export JAVA_HOME=$java_home
export PATH=\$PATH:\$JAVA_HOME/bin
export CLASSPATH=.:\$JAVA_HOME/jre/lib/rt.jar:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
JAVA
}
grep bashrc_mruse ~/.bashrc||echo '[ -f ~/.bashrc_costomer ] && . ~/.bashrc_costomer ' >> ~/.bashrc
执行~/.bashrc
后就可以通过java_home
来获取JAVA所需要的环境变量
然后将输出内容加入/etc/profile
,执行source /etc/profile
后JAVA_HOME
等环境变量就生效了;
问题来了:
在此以后每次登陆服务器终端都会显示(期望时可以使用~/.bashrc_costomer
中定义的内容,但是登陆后终端不显示这行代码):
[ -f ~/.bashrc_costomer ] && . ~/.bashrc_costomer
但是系统默认~/.bashrc
里有这么一行,是不会显示的
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
是不是因为我姿势不对,有没有那位能指点下。
系统使用的是CentOS
,默认shell
是bash
现在知道系统启动后会自动执行(或加载)以下文件
~/.bashrc
/etc/bashrc
/etc/profile
也希望能系统讲下这三个文件的关系和区别。
其实打开里面的内容看看就大概知道了,简言之:
~/.bashrc 是用户相关的终端的环境设置,通常打开一个新终端时,默认会load里面的设置,在这里的设置不影响其它人。如果一个服务器多个开发者使用,大家都需要有自己的sdk安装和设置,那么最好就是设置它。
/etc/bashrc 是系统全局针对终端环境的设置,修改了它,会影响所有用户的终端环境,这里一般配置终端如何与用户进行交互的增强功能等(比如sudo提示、命令找不到提示安装什么包等),新开的终端,已经load了这个配置,最后才load用户自己的 ~/.bashrc
/etc/profile 是系统全局针对终端环境的设置,它是login时最先被系统加载的,是它调用了/etc/bashrc,以及/etc/profile.d目录下的*.sh文件,如果有一个软件包,系统上只安装一份,供所有开发者使用,建议在/etc/profile.d下创建一个新的xxx.sh,配置环境变量。