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 中获取变量。
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变量。)