技术解析

老司机们,如何导出一个环境变量给当前的终端窗口使用
0
2021-06-24 21:05:03
idczone
背景是这样的:

0.把一些项目用到的环境变量放到一个 sh 脚中;

1.解下来的 Makefile 中要用到步骤 0 中 export 的环境变量;


---------------------
做过的尝试:
0. 将环境变量写入 bash,然后 export,这样的结果是只要这个 bash 退出了,export 的变量也就跟着没了,后面的步骤 1 就无法得到期望的变量的。

1.在 bash 脚本的最后加入一个 bash 命令,让它在退出前再生一个儿子,然后让后面的所有 make 都在它儿子身上执行,这应该是可以的,但是平白无故的多了一个儿子,感觉不完美。

2.实在没有好方法改改执行顺序也可以接受。

老司机们有何建议?
bash 文件例如 myshell.sh 中写 export abc=123 这样的变量定义,然后在调用的时候 source 这个 bash 文件:source myshell.sh

1. 用 source,source env_setup.sh
2. direnv,在进入某个目录时,自动设置环境变量

你的 make 命令应当在那个 shell 脚本中执行,或者在终端中手动的 source 这个 shell 脚本(/path/to/sh 或者 sh -c 这样都是不行的),然后再执行 make。
在进程中修改环境变量只对进程本身或者其子进程有效。
修改系统环境变量设置需要重新启动 shell。在 Windows 中可以监听 WM_SETTINGCHANGE 消息。

莫非是需要 source 或者.命令?




你们说对了,是需要使用 source 或是.来实现的。当时发完帖子后就下班了,路上一直在想,恍惚记得以前好像用过类似的方法,到家吃完饭之后恍然大悟,原来是与脚本无关,而是需要使用. 或 source 来导出环境变量。导出后使用 env 就可以看到了。
多谢楼上各位了。
可以结帖了。

再来补充一下:
source filename 其实只是简单地读取脚本里面的语句依次在当前 shell 里面执行,没有建立新的子 shell。那么脚本里面所有新建、改变变量的语句都会保存在当前 shell 里面。
而使用 shell 或是 bash 来执行脚本,则会先创建一个子进程,然后子进程里运行脚本内容,脚本内容结束,则子进程也结束,一切又回到原点。

.env ?

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服