Rem*_*tec 0 unix bash makefile environment-variables sh
我想在运行 makefile 命令时设置环境变量,但理想情况下这些变量将存储在另一个文件中。
./生成文件
_init_dev:
. ./config/dev-env
diff-dev: _init_dev
cdk diff
deploy-dev: _init_dev
cdk deploy
Run Code Online (Sandbox Code Playgroud)
./config/dev-env
export HELLO_CDK_DEPLOY_ENVIRONMENT=dev
Run Code Online (Sandbox Code Playgroud)
首先,我尝试使用source加载变量,但是失败并显示以下消息:
make: source: Command not found
我明白这是因为make运行sh而不是bash。
然后我尝试.在配置文件前面添加以尝试以这种方式加载变量。
这两种方法都没有奏效。当我运行cdk命令时,我可以从输出中看到环境变量尚未设置。
任何人都可以建议一种让它发挥作用的方法吗?
makefile 中的每个配方行都在其自己的 shell 中运行。环境变量会修改当前 shell,但这些更改会在 shell 退出时消失。因此,一个配方设置的环境变量在不同配方中可见是完全不可能的。
如果您希望这些变量可用,则必须在每个配方行中获取它们,如下所示:
diff-dev:
. ./config/dev-env && cdk diff
deploy-dev:
. ./config/dev-env && cdk deploy
Run Code Online (Sandbox Code Playgroud)
您可以将其放入变量中,例如:
CDK = . ./config/dev-env && cdk
diff-dev:
$(CDK) diff
deploy-dev:
$(CDK) deploy
Run Code Online (Sandbox Code Playgroud)
或者,如果您的dev-env文件是一种足够简单的格式(例如您显示的格式),它既可以作为 makefile 又可以作为 shell 脚本,那么您可以包含它:
include ./config/dev-env
diff-dev:
cdk diff
deploy-dev:
cdk deploy
Run Code Online (Sandbox Code Playgroud)
但这仅适用于非常有限的内容dev-env(基本上是简单地将变量分配给静态字符串)。
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |