参考《linux命令、编辑器与shell编程》(清华大学出版社)
当启动shell时,它将运行启动文件来初始化自己。具体运行哪个文件取决于该shell是登陆shell还是非登陆shell的交互方式(比如通过bash),又或者是一个非交互式shell(用来执行shell脚本)。要执行启动文件中的命令,用户就必须具备读的权限,而一般的Linux发行版本都会把对应的命令放在一些启动文件中。
1:交互式登陆shell
交互式登陆shell指的是当用户登录系统时所用的那个shell(可以默认指定,如bash shell)。登录shell 将查找几个不同的启动文件来处理其中的命令, bash shell 处理文件的顺序如下:
/etc/profile
~/.bash_profile、~/.bash_login、~/.profile
~/.bash_logout
2:交互式非登陆shell
交互式非登陆shell指的是如果启动了一个bash shell 而没有等录系统(如在CLI 提示符中键入bash),则启动了一个交互式非登录shell。交互式非登录shell并不执行前面提到的启动文件中的命令,然而交互式非登陆shell从登录shell继承了由这些启动文件设置的shell变量。
/etc/bashrc
.bashrc
3:非交互式shell
非交互式shell指的是以shell script(脚本)方式运行。在这种模式在运行时shell 并不与用户进行交互(除非在运行时需要用户指定运行参数),而是读取存放在文件中的命令并执行它们。当它读到文件的结尾,shell 也就终止了。这些shell从登陆时就继承了由这些启动文件设置的shell变量。
BASH_ENV