Makefile 中的源环境变量文件

Ahs*_*eem 0 linux bash makefile jenkins

所以从我的本地机器我可以做到这一点:

 . env_vars.env
Run Code Online (Sandbox Code Playgroud)

它工作正常:

猫 env_vars.env

#!/bin/bash
export abce=def
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在 makefile 中反映相同时,它不返回任何内容:

SHELL=/bin/bash

print-env-vars:
        . env_vars.env
        echo ${abce}
Run Code Online (Sandbox Code Playgroud)

我还尝试在 makefile 中使用 source env_vars.env 但输出仍然相同。想知道如何在 makefile 中获取变量。

che*_*ner 7

make配方的每一行都由一个单独的 shell 执行,因此即使您获取文件,源文件的 shell 也会在评估下一行之前退出。它相当于从你的 shell 运行以下命令:

bash -c '. env_vars.env'
bash -c 'echo ${abce}'
Run Code Online (Sandbox Code Playgroud)

将两个命令放在同一行(或用于\将单个逻辑行拆分为多个物理行),以便在同一个 shell 中执行它们。分号是必需的,这样 shell 就不会被. env_vars.env echo ${abce} 视为要运行的单个命令。

print-env-vars:
        . env_vars.env; \
        echo $${abce}
Run Code Online (Sandbox Code Playgroud)

(双美元符号确保您实际上将参数扩展传递给 shell,而不是make尝试扩展make变量。)