有时候编写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。