我使用Go来开发程序,安装govendor之后发现命令行中执行govendor无效,需要将govendor所在的路径添加到PATH环境变量中。我的软件环境是iTerm2+zsh。
Mac中的环境变量介绍
Mac系统的环境变量,加载顺序为:
/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc
当然/etc/profile和/etc/paths是系统级别的,系统启动就会加载,后面几个是当前用户级的环境变量。后面3个按照从前往后的顺序读取,如果~/.bash_profile文件存在,则后面的几个文件就会被忽略不读了,如果~/.bash_profile文件不存在,才会以此类推读取后面的文件。~/.bashrc没有上述规则,它是bash shell打开的时候载入的。
全局设置,一般不建议修改/etc/profile和/etc/bashrc 文件,而去修改/etc/paths文件。如果想要对所有用户都生效,则可在/etc/paths文件的最后一行加上自己的app路径。优先级也是最高的。
单个用户生效的配置,一般都是修改~/.bash_profile文件,若bash shell是以login方式执行时,才会读取此文件。该文件仅仅执行一次!
如果没特殊说明,设置PATH的语法都为:
export PATH=<PATH 1>:<PATH 2>:<PATH 3>:.....:<PATH N>:$PATH
推荐设置用户个人自己的环境变量,尽量不破坏Mac系统全局变量
注意:Linux 里面是.bashrc,而Mac是.bash_profile
操作实录
vim ~/.bash_profile
添加下面的一行
export PATH=/Users/tao/go/bin:$PATH
使用下面的命令使之生效
source ~/.bash_profile
查看是否生效
echo $PATH
由上图可见,我在命令行执行govendor -h已经可以正常显示结果了。
需要注意的是,上面的设置默认使用bash,如果你在Mac上使用的是zsh等shell工具,需要再做如下配置,来达到环境变量设置的永久生效。
vim ~/.zshrc
在开头添加
if [ -f ~/.bash_profile ]; then
source ~/.bash_profile
fi
使用下面的命令使之立即生效
source ~/.zshrc
原因解释如下:
bash的配置文件是.bashrc, zsh的配置文件是.zshrc,当你使用zsh作为默认shell工具的时候,它启动时并不会加载bash的这两个配置文件.bashrc和.bash_profile,而只会
加载自己的配置文件.zshrc,为了让我们的配置文件生效,只能在.zshrc中添加上面的配置。
如果不做上述设置,你就会发现,只有当你每次source ~/.bash_profile后才会生效,下次重新打开zsh窗口,还是不生效。
参考文献
[1].https://superuser.com/questions/866683/iterm-zsh-not-reading-bashrc-or-bash-profile