有时候编写go程序的时候需要将当前目录加到系统GOPATH
中,不然就得将代码放置在已有的GOPATH
之下。所以一般习惯在项目根目录执行创建一个shell
脚本来动态的修改GOPTAH
。
脚本很简单,代码如下:1
2
3#/bin/sh
CURRENT=`pwd`
export GOPATH="${GOPATH}:${CURRENT}"
因为是shell
脚本,所以就习惯性的执行了如下命令:1
2sh env
echo $GOPATH
期望GOPATH
中已经追加上了当前目录,然而事与愿违,并没有什么效果,GOPATH
仍然是之前的内容。
原因:
使用 sh
命令来执行shell脚本的时候,脚本真正是在sh
创建的子shell
中执行,所以当sh
进程完成的时候并没有修改系统变量,所以通过执行 sh env
来修改系统变量是无效的。子shell
和父shell
彼此无法使用对方的变量,子shell
对环境变量的修改也不会影响父shell
。
需要使用 source env
来执行,source
命令执行脚本的时候,是在source
当前shell
中执行的,并不会创建子shell
。