【问题标题】:How to export environment variables in Makefile如何在 Makefile 中导出环境变量
【发布时间】:2018-05-17 10:01:07
【问题描述】:

我正在尝试导出环境变量,以便可以在父 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

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

任何帮助如何在目标/规则中执行此操作?

【问题讨论】:

  • Make 不是一个很好的工具。你会考虑使用 shell 脚本吗?
  • @Beta 我会考虑的。我可以从类似于 Make 的 shell 脚本创建命令吗?
  • 我不明白你的问题。
  • @Beta 对不起,让我澄清一下,你问我是否会考虑使用 shell 脚本,对吗?
  • 是的,你说过你会的。然后你问是否可以使用类似于 Make 的脚本来创建命令;或者您是否可以像 Make 那样创建一个接受参数的脚本;或者您是否可以创建一个调用 Make 的脚本。 (这三个答案都是“是”。)

标签: makefile environment-variables


【解决方案1】:

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

您唯一能做的就是编写一个 shell 函数,该函数在您正在运行的 shell 进程中调用(它显示您的提示等),或者有一个由您提供而不是运行的脚本:这将使脚本在同一个 shell 进程中运行,而不是创建一个新进程。

所以你可以在 ~/.bashrc 或类似的地方写一个 shell 函数,像这样:

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

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

. set-my-vars.sh

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2014-12-15
    • 2017-03-17
    • 2015-05-07
    • 1970-01-01
    • 2015-02-01
    • 2021-05-01
    相关资源
    最近更新 更多