.bash_profile 与 .bashrc 的区别
.bash_profile
is executed for login shells
, while .bashrc
is executed for interactive non-login shells
.
login shell 与 non-login shell 的区别
- 当你直接在机器login界面登陆、使用ssh登陆或者su切换用户登陆时,.bash_profile 会被调用来初始化shell环境
Note:.bash_profile文件默认调用.bashrc文件
.bash_profile中有如下内容
1 2 3
| if [ -f ~/.bashrc ]; then . ~/.bashrc fi
|
当你不登陆系统而使用ssh直接在远端执行命令,.bashrc 会被调用
当你已经登陆系统后,每打开一个新的Terminal时,.bashrc 都会被再次调用。
测试准备工作
hclient2主机hadoop用户家目录下执行
1 2
| [hadoop@hclient2 ~]$ echo "invoke hclient2:~/.bashrc">>.bashrc [hadoop@hclient2 ~]$ echo "invoke hclient2:~/.bash_profile">>.bash_profile
|
Login Shell
- 窗口登陆
1 2 3 4 5 6 7 8 9 10 11
| 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 ~]$
|
- SSH 登陆
1 2 3 4 5
| [hadoop@hserver ~]$ ssh hclient2 Last login: Mon Feb 25 22:42:19 2013 from hserver invoke hclient2:~/.bashrc invoke hclient2:~/.bash_profile [hadoop@hclient2 ~]$
|
- su 登陆
1 2 3
| [root@hclient2 ~] invoke hclient2:~/.bashrc invoke hclient2:~/.bash_profile
|
Non-login Shell:
Note:
1
| ssh ...[user@] hostname [command]
|
1 2 3 4
| 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 文件中。因为不管是登陆还是不登陆,该文件总会被调用!