우리는 다음과 같은 업무를 수행합니다 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" 를 실행하면 환경을 얻을 수 있습니다.