Shell

從 Makefile 導出環境變數不起作用

  • June 30, 2021

我們有以下任務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 中還有其他任務不應該受到此導出的影響

配方中的每一行都使用單獨的 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 ...

引用自:https://unix.stackexchange.com/questions/656437