私たちは次のことを行いますMakefile
。
test:
export SOME_ENV=someTest
go test -tags=integration -v -race ./tests/integrationtest/...
シェルプロンプトでSOME_ENVを設定し、次のコマンド()はgo test
内部的に.someTest.env
ファイルを選択します。
$ export SOME_ENV=someTest
$ go test -tags=integration -v -race ./tests/integrationtest/...
しかし、Makefileメソッドは機能しません。
Makefile
環境変数を設定する方法がないのはなぜですか?
注:Makefileには、このエクスポートの影響を受けない別の操作があります。
答え1
レシピの各行は、別々のシェル呼び出しを使用して実行されます。だから
export SOME_ENV=someTest
実行された後、新しいシェルで
go test ...
後者は環境変数を見ることができません。
変数をエクスポートするには、Makeのコンストラクタを使用する必要があります。
export SOME_ENV := someTest
test:
go test ...
またはインライン変数を指定します。
test:
SOME_ENV=someTest go test ...
または、次の2行が同じシェルで実行されていることを確認してください。
test:
export SOME_ENV=someTest && \
go test ...
答え2
@Stephen kittが指摘したように、エクスポートはmakeを呼び出すシェルではなく別のシェルに適用されます。エクスポート前のコマンドも make で実行された場合、彼の答えは解決策を提供しますが、次のようにすることができます. make 以外で使用するには、次のようにします。
print_my_env:
echo 'export MY_ENV="blue"'
それから:
eval "$(make print_my_env)"
echo "$MY_ENV" を実行すると環境を取得できます。