按照打开时是否进行登录验证可将shell分为两种类型:登录shell(login shell)和非登录shell(non-login shell)。打开登录shell时将会执行配置文件.bash_profile,打开非登录shell时将会执行配置文件.bashrc。
常见的登录shell的情况有:
- 第一次进入系统时所启动的shell
- 按Ctrl+Alt+F1,进入虚拟终端shell
- 使用ssh或者rsh登录到远程节点时
- 使用bash -l 命令模拟初始化登录操作
- 模拟系统初始化时root登录的命令 sudo -i 或则非root用户(non-root user)登录的命令 sudo -u username -i
- su -username
- sudo loging username
常见的非shell登录情况主要是在桌面环境下打开一个终端,比如 gnome terminal,就是一个非登录shell。这个shell将执行.bashrc。如果.bashrc或者.bash_profile都不存在,可以使用vi在~/下创建这两个文件。
做一个简单的测试,在.bash_profile的结尾加一段话:
echo "TEST_LOGIN_SHELL=\"I am a login shell.\"" >> ~/.bash_profile
在Ubuntu的桌面环境下打开terminal,然后使用echo命令检测是否存在该环境变量:
echo TEST_LOGIN_SHELL
然后按下CTRL+ALT+F1,切换进入虚拟终端,输入用户名和密码登录后在使用echo命令,检查该变量是否被设置。
从虚拟终端切换回来的方法是:同时按小CTRL+ALT+F7.
很多情况下,这两个配置文件中的内容是相同的,比如PATH。一个简单的方法,就是在.bash_profile中加入以下一段话:
if [-f ~/.bashrc] ; then
source ~/.bashrc
fi
这样就不需要维护两个文件的一致性了,只需要维护好.bashrc就可以了。