老司机们,如何导出一个环境变量给当前的终端窗口使用

2018-04-12 16:31:36 +08:00
 z0z
背景是这样的:

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

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


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

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

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

老司机们有何建议?
3110 次点击
所在节点    Linux
7 条回复
kaneg
2018-04-12 17:06:52 +08:00
bash 文件例如 myshell.sh 中写 export abc=123 这样的变量定义,然后在调用的时候 source 这个 bash 文件:source myshell.sh
hyq
2018-04-12 17:11:36 +08:00
1. 用 source,source env_setup.sh
2. direnv,在进入某个目录时,自动设置环境变量
forcecharlie
2018-04-12 17:14:56 +08:00
你的 make 命令应当在那个 shell 脚本中执行,或者在终端中手动的 source 这个 shell 脚本(/path/to/sh 或者 sh -c 这样都是不行的),然后再执行 make。

在进程中修改环境变量只对进程本身或者其子进程有效。
修改系统环境变量设置需要重新启动 shell。在 Windows 中可以监听 WM_SETTINGCHANGE 消息。
vincenttone
2018-04-12 17:30:49 +08:00
莫非是需要 source 或者.命令?
z0z
2018-04-12 21:35:36 +08:00
@kaneg
@hyq
@forcecharlie
@vincenttone 你们说对了,是需要使用 source 或是.来实现的。当时发完帖子后就下班了,路上一直在想,恍惚记得以前好像用过类似的方法,到家吃完饭之后恍然大悟,原来是与脚本无关,而是需要使用. 或 source 来导出环境变量。导出后使用 env 就可以看到了。

多谢楼上各位了。
可以结帖了。
z0z
2018-04-12 21:40:08 +08:00
再来补充一下:
source filename 其实只是简单地读取脚本里面的语句依次在当前 shell 里面执行,没有建立新的子 shell。那么脚本里面所有新建、改变变量的语句都会保存在当前 shell 里面。

而使用 shell 或是 bash 来执行脚本,则会先创建一个子进程,然后子进程里运行脚本内容,脚本内容结束,则子进程也结束,一切又回到原点。
zjb861107
2018-04-12 23:08:41 +08:00
.env ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/446270

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX