如何在 Makefile 中从 .env 动态加载值?
How can I dynamically load values from .env in Makefile?
我有一个如下所示的 Makefile 目标:
env-%:
@echo "Getting ${*} env"
cat .env-common > .env
@echo >> .env
cat .env-${*} >> .env
@echo >> .env
cat .env
echo "Loading .env contents into shell"
source .env
echo ${SOMETHING_FROM_COMMON}
echo ${SOMETHING_FROM_DEV}
然后期望 SOMETHING_FROM_DEV
在环境中的其他目标,例如:
something-else-%: .env-%
echo ${SOMETHING_FROM_DEV} # Actual step is a docker build, but thats irrelevant here I think.
我的想法是,我可以像 $ make something-else-dev
那样调用它,它将 运行 env-dev
的先决任务,它连接两个环境文件以创建一个 .env
文件。然后它需要将 .env
中的所有内容加载到 shell 中,完成先决条件步骤。最后,something-else
运行s 和 echo(或该配方包含的任何内容)具有使用值。
.env-common 文件如下所示:
# Common variables
SOMETHING_FROM_COMMON=hello
.env-dev 文件如下所示:
# Dev specific variables
SOMETHING_FROM_DEV=hello-from-dev
按上述方式尝试 include
会产生以下结果:
echo "Loading .env contents into shell"
Loading .env contents into shell
include .env
make: include: No such file or directory
make: *** [env-dev] Error 1
使用 eval
过早引入文件,我认为是在首次使用时而不是在目标中 运行 时。 source
似乎没有像我预期的那样工作,但我怀疑我也没有理解正确。
也许有一种方法可以调用 bash 将它们加载到环境中?
This gist 很接近,但理想情况下我想使用目标之间示例中的 $$SECRET_KEY
。
理想情况下,.env 文件中也会支持评论(前缀为 #
,但这不会破坏交易。
欢迎任何想法/想法。
看来您应该改用其他设施。
include .env-common
include .env-${ENV}
现在,make ENV=dev
将包括 .env-common
和 .env-dev
。
也许使第二个条件成为条件,并且仅在实际设置了 ENV
时才这样做,或者为 ENV
指定默认值。
我有一个如下所示的 Makefile 目标:
env-%:
@echo "Getting ${*} env"
cat .env-common > .env
@echo >> .env
cat .env-${*} >> .env
@echo >> .env
cat .env
echo "Loading .env contents into shell"
source .env
echo ${SOMETHING_FROM_COMMON}
echo ${SOMETHING_FROM_DEV}
然后期望 SOMETHING_FROM_DEV
在环境中的其他目标,例如:
something-else-%: .env-%
echo ${SOMETHING_FROM_DEV} # Actual step is a docker build, but thats irrelevant here I think.
我的想法是,我可以像 $ make something-else-dev
那样调用它,它将 运行 env-dev
的先决任务,它连接两个环境文件以创建一个 .env
文件。然后它需要将 .env
中的所有内容加载到 shell 中,完成先决条件步骤。最后,something-else
运行s 和 echo(或该配方包含的任何内容)具有使用值。
.env-common 文件如下所示:
# Common variables
SOMETHING_FROM_COMMON=hello
.env-dev 文件如下所示:
# Dev specific variables
SOMETHING_FROM_DEV=hello-from-dev
按上述方式尝试 include
会产生以下结果:
echo "Loading .env contents into shell"
Loading .env contents into shell
include .env
make: include: No such file or directory
make: *** [env-dev] Error 1
使用 eval
过早引入文件,我认为是在首次使用时而不是在目标中 运行 时。 source
似乎没有像我预期的那样工作,但我怀疑我也没有理解正确。
也许有一种方法可以调用 bash 将它们加载到环境中?
This gist 很接近,但理想情况下我想使用目标之间示例中的 $$SECRET_KEY
。
理想情况下,.env 文件中也会支持评论(前缀为 #
,但这不会破坏交易。
欢迎任何想法/想法。
看来您应该改用其他设施。
include .env-common
include .env-${ENV}
现在,make ENV=dev
将包括 .env-common
和 .env-dev
。
也许使第二个条件成为条件,并且仅在实际设置了 ENV
时才这样做,或者为 ENV
指定默认值。