환경 변수 내보내기가 Makefile에서 작동하지 않습니다.

환경 변수 내보내기가 Makefile에서 작동하지 않습니다.

우리는 다음과 같은 업무를 수행합니다 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 ...

또는 다음 두 줄이 동일한 셸에서 실행되는지 확인하세요.

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" 를 실행하면 환경을 얻을 수 있습니다.

관련 정보