bash shell具体可以分为3种类型,这3种类型为:
1 login shell
就是需要输入用户名和密码才能登陆的shell
2 可交互的非login shell
就是不用登陆的,但是可以同用户进行交互的shell,比如在父shell当中执行bash命令产生的子shell就是一个可交互的非login shell
3 不可交互的非login shell
这类shell通常都是系统自己使用
对于第三类不可交互的非login shell,如果想要让shell启动之前读取相应配置文件,可以通过设置BASH_ENV环境变量来实现。当把要执行的配置文件赋给这个变量时,那么不可交互的非login shell就可以通过BASH_ENV的值来执行相关的配置文件
对于第一类的login shell和第二类可交互的非login shell,涉及到的配置文件分别位于/etc和$HOME目录下,如下图所示:
/etc目录下面包含profile,bashrc文件和profile.d目录(其中包含各种自顶一个的.sh文件);
$HOME目录下包含.bash_profile|.bash_login|.profile(shell的搜索顺序按照这个顺序进行,找到一个就不会在找下一个。如果想知道自己的shell到底使用哪个配置文件,也可以通过man bash查看)和.bashrc。
当logins shell执行时,配置文件读取额流程如下图所示:
login shell首先读取/etc/profile文件,/etc/profile会调用执行/etc/profile.d目录下的.sh文件,然后shell读取$HOME目录下的.bash_profile|.bash_login|.profile,然后.bash_profile|.bash_login|.profile会调用.bashrc,.bashrc会调用/etc/bashrc,/etc/bashrc会调用执行/etc/profile.d目录下的.sh文件
当可交互的非login shell执行时,配置文件的读取流程如下图所示:
可交互的非login shell首先读取.bashrc,同上面一样,.bashrc调用/etc/bashrc,/etc/bashrc调用执行/etc/profile.d目录下面的.sh文件。