You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Makefile目标中读取动态生成的.env文件时遇到问题

问题原因与解决方法

你的问题核心是Make的变量展开时机早于shell命令执行:

Make会先解析所有$(...)语法,再去执行目标对应的shell命令。当Make处理test_env里的$(cat .env | xargs)和$(FOO)时,create_dotenv_file的命令还没执行,.env文件根本不存在,所以这两个表达式展开后都是空字符串,就出现了你看到的export && echo输出。

两种可行的解决方法

方法1:转义$,让shell处理变量展开

把Make里的$改成$$,这样Make会把它转义成单个$传给shell,让shell在执行命令时再去解析这些表达式(此时.env已经生成):

create_dotenv_file:
  echo "FOO=BAR" > .env

test_env: create_dotenv_file
  export $$(cat .env | xargs) && \
  echo $$FOO

方法2:用shell的source命令更简洁

直接用shell的source(简写为.)加载.env文件,同样要转义$避免Make提前展开:

create_dotenv_file:
  echo "FOO=BAR" > .env

test_env: create_dotenv_file
  . ./.env && \
  echo $$FOO

执行make test_env后,就能正确输出BAR了。

内容的提问来源于stack exchange,提问作者Gino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:51:14