导出环境变量在 Makefile 中不起作用

导出环境变量在 Makefile 中不起作用

我们有以下任务Makefile

test:
    export SOME_ENV=someTest
    go test -tags=integration -v -race  ./tests/integrationtest/...

在 shell 提示符下,设置 SOME_ENV 并且下一个命令(go test)在内部选择.someTest.env文件

 $ export SOME_ENV=someTest
 $ go test -tags=integration -v -race  ./tests/integrationtest/...

但 Makefile 方法不起作用

为什么没有使用Makefile方法设置环境变量?

注意:我们在 Makefile 中有另一个任务,不应受到此导出的影响

答案1

配方中的每一行都使用单独的 shell 调用来执行。因此

export SOME_ENV=someTest

被执行,然后在一个新的shell中,

go test ...

后者看不到环境变量。

您应该使用 Make 的构造导出变量:

export SOME_ENV := someTest

test:
        go test ...

或者指定内联变量:

test:
        SOME_ENV=someTest go test ...

或确保这两行在同一个 shell 中运行:

test:
        export SOME_ENV=someTest && \
        go test ...

答案2

正如 @Stephen kitt 指出的那样,导出将在一个单独的 shell 中生效,而不是在您调用 make 的 shell 中生效,如果导出之前的命令也将使用 make 运行,他的回答给出了一个解决方案,但您可以执行类似的操作如果你想在 make 之外使用它:

print_my_env:
    echo 'export MY_ENV="blue"'

然后:

eval "$(make print_my_env)"

现在如果你运行 echo "$MY_ENV" 你应该得到你的环境。

相关内容