Mac下配置环境变量配置不生效.bashrc文件每次打开终端都需要source的问题

先了解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 shellvsno login shell

  1. login shell
    需要输入用户名和密码,进入的 shell就是loginshell。
    注意:在shell里使用su - user_name 切换用户,登录的shell也是login shell
    login shell会读取的文件有:
    /etc/profile~/.bash_profile,~/.bash_login~/.profile,按以上顺序读取。
  2. 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文件,加入上述代码



原文地址:https://www.cnblogs.com/my-blogs-for-everone/p/12756282.html