我尝试导出环境变量,以便可以在父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 :(得分:3)
您不能使用makefile或使用单独的shell脚本执行此操作。运行make或运行shell脚本时,它会创建一个新进程。当该过程退出时,对该过程的环境所做的任何更改都将被丢弃。对于进程来说,修改其父进程的环境是不可能的(在类UNIX系统中)。
你唯一能做的就是编写一个shell函数,它在你正在运行的shell进程中调用(显示你的提示等)或者有一个你来源的脚本,而不是运行:导致脚本在同一个shell进程中运行,而不是创建一个新进程。
所以你可以在你的~/.bashrc
或类似的东西中写一个shell函数:
setvars () { export $(grep -v ^# env.txt | xargs); }
或者您可以编写一个单独的shell脚本,但是您无法运行它必须使用它(.
命令来源脚本而不是运行它):
. set-my-vars.sh