我正在尝试编写一个 make 任务,该任务将从我的 .env 文件中导出所有变量,该文件应如下所示:
A=1
B=2
如果我在终端输入:
set -a
. ./.env
set +a
它工作得很好。
但 Makefile 中的相同任务不起作用:
export.env:
set -a
. ./.env
set +a
make export.env # done
printenv | grep A # nothing!
我需要这些变量在 make 任务完成后继续存在。
答案1
与任何过程一样,make
无法修改现有进程的环境,它只能控制传递给它启动的进程的环境。如果不填充输入缓冲区,就无法完成您想要做的事情。
此外,make
在不同的 shell 中处理每个命令行,因此您的set -a
、. ./.env
和set +a
行在单独的 shell 中运行。的效果. ./.env
只能在运行该命令的 shell 中看到。
答案2
现代make
实施包括对环境管理的支持。
GNU make does、my smake
dos 和我的增强版本(SunPro Make
在 tarball 中)都schilytools
支持它。
如果您仔细编写env
文件以在不同行上包含赋值和export
语句,则可以include
将该env
文件放在您的Makefile
.
使用例如:
include $(HOME)/.env
在你的Makefile
。