这两个文件都是在home的用户目录下面,属于用户的特有的环境变量,而/etc/profile则是系统的环境变量,每个用户都可以访问的环境变量
那么.bash_profile 与 .bashrc有什么不同呢?官方有句话:
.bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.
也就是说.bash_profile是登录的时候调用的,而 .bashrc是每次交互的时候就会调用
- 直接在机器中login时,登录成功后会调用.bash_profile
- 如果是ssh或者su用户时,这时会调用.bashrc
- 当登录成功后,每次打开一个终端时,这时也会调用.bashrc
当然除了这两个文件,还会有其他的环境变量设置的文件
具体执行顺序为:
/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
(~/.bash_profile | ~/.bash_login | ~/.profile) 表示只会执行其中一个文件,从左往右找,一旦找到不会继续找,如找到了.bash_profile就会不会去找.bash_login和.profile了,
.bash_profile找不到才会找.bash_login,.bash_login找不到才会找.profile
有了上面的执行顺序,我们设计这样一个需求,比如我只想让jdk安装在普通用户test下,而不想被用户test2和root用户使用jdk和执行jdk相关命令
如何设计呢?
我们通常在linux中安装jdk,jdk的环境变量都是设置在/etc/profile中,但是这样的后果就是所有用户都可以执行java命令和运行java项目
如果我只想test用来运行java项目,那么jdk的环境变量只能设置在/home/test/.bash_profile中,根据执行顺序,bash_profile只会执行自己用户目录下的,不能执行其他用户下的bash_profile
文章评论