今天在学习Linux环境变量相关知识时,发现教程上初始化过程读取的文件和我使用机器读取的文件不一样!后来发现教程使用的是<code>Bourne Shell</code>,而我使用的是<code>bash shell</code>!于是就上网查询<code>bash shell</code> 的初始化过程!转自:Linux社区
文件的加载时机
-
/etc/profile
全局(公有)配置,不管是哪个用户,登录时都会读取该文件。 -
/ect/bashrc
Ubuntu
没有此文件,与之对应的是/ect/bash.bashrc
它也是全局(公有)的
bash
执行时,不管是何种方式,都会读取此文件。 -
~/.profile
若bash
是以login
方式执行时,读取~/.bash_profile
,若它不存在,则读取~/.bash_login
,若前两者不存在,读取~/.profile。
另外,图形模式登录时,此文件将被读取,即使存在~/.bash_profile
和~/.bash_login
。 -
~/.bash_login
若bash
是以login
方式执行时,读取~/.bash_profile
,若它不存在,则读取~/.bash_login
,若前两者不存在,读取~/.profile
。 -
~/.bash_profile
Unbutu
默认没有此文件,可新建。
只有bash
是以login
形式执行时,才会读取此文件。通常该配置文件还会配置成去读取~/.bashrc
。 -
~/.bashrc
当bash
是以non-login
形式执行时,读取此文件。若是以login
形式执行,则不会读取此文件。 -
~/.bash_logout
注销时,且是longin
形式,此文件才会读取。也就是说,在文本模式注销时,此文件会被读取,图形模式注销时,此文件不会被读取。
下面是在本机的几个例子:
- 图形模式登录时,顺序读取:
/etc/profile
和~/.profile
- 图形模式登录后,打开终端时,顺序读取:
/etc/bash.bashrc
和~/.bashrc
- 文本模式登录时,顺序读取:
/etc/bash.bashrc
,/etc/profile
和~/.bash_profile
- 从其它用户
su
到该用户,则分两种情况:
(1)如果带-l
参数(或-参数,--login
参数),如:su -l username
,则bash
是login
的,它将顺序读取以下配置文件:/etc/bash.bashrc
,/etc/profile
和~/.bash_profile
。
(2)如果没有带-l
参数,则bash
是non-login
的,它将顺序读取:/etc/bash.bashrc
和~/.bashrc
- 注销时,或退出
su
登录的用户,如果是longin
方式,那么bash
会读取:~/.bash_logout
- 执行自定义的
shell
文件时,若使用bash -l a.sh
的方式,则bash
会读取行:/etc/profile
和~/.bash_profile
,若使用其它方式,如:bash a.sh
,./a.sh
,sh a.sh
(这个不属于bash shell
),则不会读取上面的任何文件。 - 上面的例子凡是读取到
~/.bash_profile
的,若该文件不存在,则读取~/.bash_login
,若前两者不存在,读取~/.profile
。
网友评论