.bash_profile, .bashrc, .bash_login, .profile, .bash_logout的执行顺序
它们是一个个shell脚本,这些文件包括:
- /etc/profile
- /etc/bashrc
- ~/.bash_profile
- ~/.bashrc
- ~/.bash_login
- ~/.profile
- ~/.bash_logout
interactive login shell的执行顺序
下面是伪代码:
1 | execute /etc/profile |
当登出交互式shell时,执行顺序是
1 | IF ~/.bash_logout exists THEN |
Note: /etc/bashrc是在~/.bashrc中被执行的
1 | cat ~/.bashrc |
interactive no-login shell的执行顺序
启动非登录交互式shell时,以下是执行顺序
1 | IF ~/.bashrc exists THEN |
测试
我们用PS1来测试执行顺序。
/etc/profile被执行
添加下面的代码到/etc/profile, 然后重新登录。
1 | [leon@192 ~]$ grep PS1 /etc/profile |
~/.bash_profile和~/.bashrc被执行
同样的,我们把这行代码添加到/.bash_profile, ~/bash_login, ~/.profile和/.bashrc中,然后再重新登录。
1 | export PS1="~/.bash_profile> " |
可以看到,如果shell是非登录交互式shell时,显示的是/.bashrc。而如果shell是登录交互式shell时,显示的是/.bash_profile。
~/.bash_login被执行
把~/.bash_profile重命名为其他名字,再重新登录。
1 | ~/.bash_profile> mv .bash_profile .bash_profile.bak |
~/.profile被执行
把~/.bash_login重命名为其他名字,再重新登录。
1 | ~/.bash_login> mv .bash_login .bash_login.bak |