【.bash_profile 与 .bashrc 的区别】
.bash_profile
is executed for
login shells
, while
.bashrc
is executed for interactive
non-login shells
.
【login shell 与 non-login shell 的区别】
1、当你直接在机器login界面登陆、使用ssh登陆或者su切换用户登陆时,.bash_profile 会被调用来初始化shell环境
Note
:.bash_profile文件默认调用.bashrc文件
.bash_profile中有如下内容
# .bash_profile
# Get the
aliases
and functions
if [ -f
~/.bashrc
]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
2、当你不登陆系统而使用ssh直接在远端执行命令,.bashrc 会被调用。
3、当你已经登陆系统后,每打开一个新的Terminal时,.bashrc 都会被再次调用。
测试准备工作
hclient2主机hadoop用户家目录下执行
[hadoop@hclient2 ~]$ echo "invoke hclient2:~/.bashrc">>.bashrc
[hadoop@hclient2 ~]$ echo "invoke hclient2:~/.bash_profile">>.bash_profile
Login Shell 两个文件都会被调用
1、窗口登陆
Red Hat Enterprise Linux Server release 6.3 (Santiago)
Kernel 2.6.32-279.el6.x86_64 on an x86_64
hclient2 login: hadoop
Password:
Last login: Mon Feb 25 23:03:45 on tty1
invoke hclient2:~/.bashrc
invoke hclient2:~/.bash_profile
[hadoop@hclient2 ~]$
2、SSH 登陆
[hadoop@hserver ~]$ ssh hclient2
Last login: Mon Feb 25 22:42:19 2013 from hserver
invoke hclient2:~/.bashrc
invoke hclient2:~/.bash_profile
[hadoop@hclient2 ~]$
3、su 登陆
[root@hclient2 ~]# su - hadoop
invoke hclient2:~/.bashrc
invoke hclient2:~/.bash_profile
Non-login Shell: 仅调用/.bashrc
Note:
ssh ...[user@] hostname [command]
If command is specified, it is executed on the remote host instead of a login shell.
[hadoop@hserver ~]$ ssh hclient2 hostname
invoke hclient2:~/.bashrc
hclient2
【故】
若要配置环境变量之类,最保险是写在 .bashrc 文件中。因为不管是登陆还是不登陆,该文件总会被调用!
NOTE: .bash_profile 的优先级 大于 .bashrc
如果在.bashrc里面定义了PATH变量或者alias变量,然后又在.bash_profile里面unset该PATH变量或者unalias,那么当我们登录一个终端时,echo该变量的值为空。也可以理解为先调用了.bashrc,读取里面的规则,再调取.bash_profile,读取.bash_profile里面的规则