Mac的使用中过程中,有许多需要增加环境变量的情况。比如配置go的私有仓库GOPRIVATE,以及校验服务器GOSUMDB。按照习惯我们都会搜索一下 “mac下如何修改环境变量”。

1.问题-环境变量不生效

mac中默认使用的是zsh终端,按照一般的修改环境变量的方法:

vim ~/.bash_profile
export GOSUMDB=sum.golang.google.cn
export GOPRIVATE=git.querytest.com #模拟

wq后,执行

source ~/.bashrc

发现环境变量确实写到.bash_profile文件里面了,通过source ~/.bashrc也确实生效了,但是一旦关闭这个执行的终端后:

go env
GOSUMDB=""
GOPRIVATE=""

没有生效。

2.mac的环境变量加载顺序

Mac系统的环境变量,加载顺序为:

/etc/profile
/etc/paths 
/etc/paths.d/
~/.bash_profile 
~/.bash_login
~/.profile
~/.bashrc
  • /etc/profile:系统级的,系统启动即加载;

  • /etc/paths:系统级的,系统启动即加载;

  • /etc/paths.d/:系统级的,系统启动即加载;

  • 后面几个是当前用户级的环境变量。后面3个按照从前往后的顺序读取:

    • 如果**~/.bash_profile**文件存在,则后面的几个文件就会被忽略不读了,
    • 如果**~/.bash_profile**文件不存在,才会以此类推读取后面的文件。
  • **~/.bashrc**没有上述规则,它是bash shell打开的时候载入的。

  • 修改用户的环境变量,只对当前用户有效, ~/.bash_profile与~/.bashrc都可以。

3.问题解决

如上所述,mac中默认使用的是zsh终端,所以上面的的环境变量增加方法只适用于bash,在zsh中不生效。

解决方案

~/.zshrc中写入一样的环境变量:

vim ~/.zshrc
export GOSUMDB=sum.golang.google.cn
export GOPRIVATE=git.querytest.com #模拟
source ~/.zshrc

网上还有一种方法(本人没有尝试,不保证成功),在~/.zshrc里面链接bash_profile文件:

source .bash_profile