GitBash中通过脚本设置环境变量不生效问题求助
这是个很常见的Shell环境变量误区,我来给你拆解清楚:
为什么脚本里的export不生效?
当你直接用./dev.bsh运行脚本时,Git Bash会启动一个子Shell进程来执行脚本里的所有命令。脚本中export的环境变量只存在于这个子Shell的生命周期里——一旦脚本执行完毕,子Shell就会退出,所有在子Shell里设置的变量都会被销毁,根本不会传递到你当前操作的父Shell(也就是那个Git Bash窗口)中。
而你手动执行export命令时,是直接在当前的父Shell进程里操作,变量自然会保留下来。
怎么让脚本里的环境变量生效?
有两种简单的解决办法:
1. 用source或.命令运行脚本
这两个命令会让脚本在当前Shell进程中执行,而不是启动子Shell。这样脚本里的export命令就会直接修改当前Shell的环境变量,执行完后变量就会生效:
source ./dev.bsh # 或者更简洁的写法 . ./dev.bsh
执行完后再输入echo $KUBECONFIG,就能看到你设置的路径了,同时kubectl也会自动使用这个指定的配置文件。
2. 将脚本内容添加到Bash配置文件(适合长期生效)
如果你需要每次打开Git Bash都自动加载这个环境变量,可以把脚本里的内容追加到~/.bashrc或~/.bash_profile文件中(Git Bash里这两个文件位于你的用户目录,比如/c/Users/schwat/.bashrc)。之后每次启动Git Bash,这些设置都会自动生效。不过这种方式更适合长期固定的环境变量,临时切换环境的话,第一种方法更灵活。
另外补充一句:你脚本里的kubectl命令其实已经修改了dev.kubecfg这个配置文件的内容,但因为父Shell没设置KUBECONFIG,所以kubectl默认还是会用~/.kube/config。只有让KUBECONFIG在父Shell中生效,kubectl才会使用你指定的配置文件。
内容的提问来源于stack exchange,提问作者Thomas Schwärzl

