先了解Mac环境变量加载顺序
/etc/profile
/etc/paths
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc
其中/etc/profile
和/etc/paths
是系统级别的,系统启动就会加载,
后几个是当前用户级的环境变量。后面3个按照从前往后的顺序读取,如果/.bash_profile文件存在,则后面的几个文件就会被忽略不读了,如果/.bash_profile文件不存在,才会以此类推读取后面的文件。
~/.bashrc没有上述规则,它是bash shell打开的时候载入的。
也就是说在当前用户的目录下,如果有了.bash_profile文件就不会去加载.bashrc文件。
login shell
vsno login shell
- login shell
需要输入用户名和密码,进入的 shell就是loginshell。
注意:在shell里使用su - user_name 切换用户,登录的shell也是login shell
login shell会读取的文件有:/etc/profile
、~/.bash_profile
,~/.bash_login
,~/.profile
,按以上顺序读取。 - no login shell。
在登录shell时不输入输入用户名和密码,那么这个就是no login shell。
在图形界面下,打开一个shell也是no login shell
no login shell 在打开的时候,执行的文件是:~/.bashrc
,而.bashrc
又会执行/etc/bashrc
文件。
解决方案:要加载.bashrc文件,需要在.bash_profile文件中直接加载该文件。
在.bash_profile文件中加入以下代码:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
改完需要source 命令生效
参考
上述修改时针对终端时bash的修改,假如终端是zsh
的话,需要找到用户目录下的.zlogin
文件,加入上述代码