V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
z0z
V2EX  ›  Linux

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

  •  
  •   z0z · 2018-04-12 16:31:36 +08:00 · 3085 次点击
    这是一个创建于 2177 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景是这样的:

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

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


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

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

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

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

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

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

    而使用 shell 或是 bash 来执行脚本,则会先创建一个子进程,然后子进程里运行脚本内容,脚本内容结束,则子进程也结束,一切又回到原点。
    zjb861107
        7
    zjb861107  
       2018-04-12 23:08:41 +08:00 via iPhone
    .env ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2698 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:36 · PVG 23:36 · LAX 08:36 · JFK 11:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.