我们有以下任务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" 你应该得到你的环境。