代码之家  ›  专栏  ›  技术社区  ›  craig

从由命令填充的Makefile导出bash环境变量

  •  0
  • craig  · 技术社区  · 3 年前

    我正在尝试导出环境变量,以便可以在父shell中访问它们 生成文件:

    export-vars:
        # extract vars from text file - remove comments - export output
        export $$(cat env.txt | grep -v ^# | xargs) 
    

    然后当我跑步时:

    $ make export-vars
    $ echo $SOME_VAR_EXPORTED_FROM_MAKEFILE
    

    我希望文本中的变量设置为环境变量。

    如何在目标/规则内做到这一点,有什么帮助吗?

    0 回复  |  直到 6 年前
        1
  •  5
  •   MadScientist    6 年前

    不能使用makefile或单独的shell脚本来实现这一点。当您运行make或shell脚本时,它会创建一个新进程。当该进程退出时,对该进程的环境所做的任何更改都将被丢弃。(在类UNIX系统中)进程不可能修改其应用程序的环境 父母亲 过程

    你唯一能做的就是编写一个shell函数,它在你正在运行的shell进程中被调用(显示你的提示等等),或者有一个你源代码的脚本,而不是运行:这将导致脚本在同一个shell进程中运行,而不是创建一个新的。

    所以你可以在你的 ~/.bashrc 或者类似的:

    setvars () { export $(grep -v ^# env.txt | xargs); }
    

    或者你可以编写一个单独的shell脚本,但你不能运行它,你必须找到它的源代码 . 命令源(而不是运行脚本):

    . set-my-vars.sh