go环境配置之 .zshrc .bashrc .bash_profile 的区别

在Mac终端运行go build一直报如下错误:

ioutil.go:4:2: cannot find package “fmt” in any of:
/usr/local/Cellar/go/1.10.2/src/fmt (from $GOROOT)
/Users/wangdejun/gopath/src/fmt (from $GOPATH)

不能找到src/fmt包,

>which go 
>/usr/local/bin/go

明显环境变量$GOROOT和$GOPATH配置错误,

修改了.zshrc和.bashrc都不能改变这个环境变量,找到.bash_profile

修改~/.bash_profile

添加export GOPATH=/usr/local/bin/go

go build文件ok,问题解决。
好奇地查了一下.bashrc,.bash_profile以及.zshrc之间的区别:

  • Shell配置文件之间的主要区别在于,有些配置比如.bash_profile只能被『登录』用户读取;另外的一些配置文件被非登录用户读取,比如.bashrc;还有一些配置比如~/.zshrc,无论登录和非登录用户都可以读取。
  • Mac OS X的终端Terminal.app实际上运行了『登录Shell』而不是『非登录shell』,那么就默认调用.bash_profile,而不是.bashrc。这样问题就明确了,在配置$GOROOT环境变量时,一定要在.bash_profile中配置才行。

【注】运行source ~/.bash_profile,source命令的作用就是用来执行一个脚本。我们知道./test.sh也可以执行test.sh脚本文件,那么source和直接执行有什么区别呢

  • 如果在一个脚本里export $PATH=111 ,用./test.sh执行该脚本,执行完毕后,运行 echo $PATH,发现没有值,如果你用source来执行 ,然后再echo ,就会发现PATH=111。
  • 因为调用./test.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反映到父shell里,但是source与你执行./test.sh不同的是它就是在本shell中执行的,所以可以直接在父shell中看到结果

 

不甚了解,仅此记录。

转发 王德军 的知乎 https://zhuanlan.zhihu.com/p/38777930  

你可能感兴趣的:(go,go)