如何从我的 makefile 中的另一个文件加载环境变量?
How can I load environment variables from another file in my makefile?
我想在 运行 我的 makefile 命令时设置环境变量,但理想情况下,这些变量将存储在另一个文件中。
./Makefile
_init_dev:
. ./config/dev-env
diff-dev: _init_dev
cdk diff
deploy-dev: _init_dev
cdk deploy
./config/dev-env
export HELLO_CDK_DEPLOY_ENVIRONMENT=dev
首先我尝试使用 source
加载变量,但是失败并显示消息:
make: source: Command not found
我理解这是因为 make
运行s sh
而不是 bash
.
然后我尝试在我的配置文件前面添加 .
以尝试以这种方式加载变量。
两种方法均无效。当我 运行 我的 cdk
命令时,我可以从输出中看到环境变量尚未设置。
任何人都可以建议如何让它发挥作用吗?
makefile 中的每个配方行都是 运行 在它自己的 shell 中。环境变量修改当前 shell,但当 shell 退出时,这些更改消失。因此,一个配方设置环境变量是完全不可能的,然后在另一个配方中可见。
如果您希望这些变量可用,您必须在每个配方行中获取它们,如下所示:
diff-dev:
. ./config/dev-env && cdk diff
deploy-dev:
. ./config/dev-env && cdk deploy
您可以将其放入变量中,例如:
CDK = . ./config/dev-env && cdk
diff-dev:
$(CDK) diff
deploy-dev:
$(CDK) deploy
或者,如果您的 dev-env
文件是一种足够简单的格式(例如您展示的格式),它既可以用作 makefile 又可以用作 shell 脚本,您可以将其包括在内:
include ./config/dev-env
diff-dev:
cdk diff
deploy-dev:
cdk deploy
但这只适用于 非常 有限的 dev-env
内容(基本上是简单地将变量赋值给静态字符串)。
我想在 运行 我的 makefile 命令时设置环境变量,但理想情况下,这些变量将存储在另一个文件中。
./Makefile
_init_dev:
. ./config/dev-env
diff-dev: _init_dev
cdk diff
deploy-dev: _init_dev
cdk deploy
./config/dev-env
export HELLO_CDK_DEPLOY_ENVIRONMENT=dev
首先我尝试使用 source
加载变量,但是失败并显示消息:
make: source: Command not found
我理解这是因为 make
运行s sh
而不是 bash
.
然后我尝试在我的配置文件前面添加 .
以尝试以这种方式加载变量。
两种方法均无效。当我 运行 我的 cdk
命令时,我可以从输出中看到环境变量尚未设置。
任何人都可以建议如何让它发挥作用吗?
makefile 中的每个配方行都是 运行 在它自己的 shell 中。环境变量修改当前 shell,但当 shell 退出时,这些更改消失。因此,一个配方设置环境变量是完全不可能的,然后在另一个配方中可见。
如果您希望这些变量可用,您必须在每个配方行中获取它们,如下所示:
diff-dev:
. ./config/dev-env && cdk diff
deploy-dev:
. ./config/dev-env && cdk deploy
您可以将其放入变量中,例如:
CDK = . ./config/dev-env && cdk
diff-dev:
$(CDK) diff
deploy-dev:
$(CDK) deploy
或者,如果您的 dev-env
文件是一种足够简单的格式(例如您展示的格式),它既可以用作 makefile 又可以用作 shell 脚本,您可以将其包括在内:
include ./config/dev-env
diff-dev:
cdk diff
deploy-dev:
cdk deploy
但这只适用于 非常 有限的 dev-env
内容(基本上是简单地将变量赋值给静态字符串)。