![함수에서 파이프라인을 통해 에코를 리디렉션할 때 환경 변수가 설정되지 않습니다.](https://rvso.com/image/170288/%ED%95%A8%EC%88%98%EC%97%90%EC%84%9C%20%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8%EC%9D%84%20%ED%86%B5%ED%95%B4%20%EC%97%90%EC%BD%94%EB%A5%BC%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%ED%95%A0%20%EB%95%8C%20%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98%EA%B0%80%20%EC%84%A4%EC%A0%95%EB%90%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
이 명령은 다음과 같습니다.
echo '18' | source meta-cmf-raspberrypi/setup-environment
대신 간단히 다음과 같이 환경 변수를 설정하지 마십시오.
source meta-cmf-raspberrypi/setup-environment
입력에 "18"이 있습니다.
링크의 질문 :파이프라인에서 내 함수가 호출될 때 환경 변수가 설정되지 않습니다.
다음을 시도했기 때문에 내 문제를 해결하지 못했습니다.
echo '18' > >(source meta-cmf-raspberrypi/setup-environment)
성공없이. 문제를 어떻게 해결하나요?
답변1
파이프라인에서 스크립트는 별도의 환경에서 제공됩니다. 프로세스 대체 예에서도 마찬가지입니다. 이는 스크립트에 설정된 변수가 하위 환경에서 호출 셸로 설정됨을 의미합니다. 하위 환경의 변경 사항은 상위 환경에 전파될 수 없습니다.
별도의 환경에서 스크립트를 소싱하지 않고 두 가지 방법으로 이 문제를 해결할 수 있습니다.
첫 번째 방법은 "여기 문자열"을 이해하는 셸에서 작동합니다.
source meta-cmf-raspberrypi/setup-environment <<<18
두 번째 방법은 표준 here-document를 사용하는 것입니다.
source meta-cmf-raspberrypi/setup-environment <<END_INPUT
18
END_INPUT
두 변형 모두에서 스크립트는 현재 환경에서 제공되며 입력은 here-string/here-document에서 리디렉션됩니다.