所以从我的本地机器我能做到这一点:
. env_vars.env
和它工作得很好:
cat env_vars.env
#!/bin/bash
export abce=def
但是当我尝试在makefile中反映它时,它什么也不返回:
SHELL=/bin/bash
print-env-vars:
. env_vars.env
echo ${abce}
我也试图与源env_vars.env内生成文件,但输出仍然是相同的。想知道如何可以生成文件内我源变量。
答案 0 :(得分:2)
make
配方的每一行都由单独的外壳程序执行,因此,即使您提供文件的源代码,也要在评估下一行之前退出作为其源代码的外壳程序。等效于从您的shell运行以下命令:
bash -c '. env_vars.env'
bash -c 'echo ${abce}'
把在同一行上两个命令(或使用\
,以拆分到多个物理线路的单个逻辑线),以使两者在相同的外壳中执行。分号是必要的,这样的外壳没有看到. env_vars.env echo ${abce}
作为要运行的单个命令。
print-env-vars:
. env_vars.env; \
echo $${abce}
(双美元符号可确保您实际上将参数扩展传递给外壳,而不是make
尝试扩展make
变量。)