shell脚本修改环境变量

有时候编写go程序的时候需要将当前目录加到系统GOPATH中,不然就得将代码放置在已有的GOPATH之下。所以一般习惯在项目根目录执行创建一个shell脚本来动态的修改GOPTAH
脚本很简单,代码如下:

1
2
3
#/bin/sh
CURRENT=`pwd`
export GOPATH="${GOPATH}:${CURRENT}"

因为是shell脚本,所以就习惯性的执行了如下命令:

1
2
sh env
echo $GOPATH

期望GOPATH中已经追加上了当前目录,然而事与愿违,并没有什么效果,GOPATH仍然是之前的内容。

原因:
使用 sh 命令来执行shell脚本的时候,脚本真正是在sh创建的子shell中执行,所以当sh进程完成的时候并没有修改系统变量,所以通过执行 sh env 来修改系统变量是无效的。子shell和父shell彼此无法使用对方的变量,子shell对环境变量的修改也不会影响父shell
需要使用 source env来执行,source命令执行脚本的时候,是在source当前shell中执行的,并不会创建子shell

参考: 用source 执行脚本和用sh 执行脚本有什么区别

0%