함수의 파이프 리디렉션을 통해 에코할 때 환경 변수가 설정되지 않음

함수의 파이프 리디렉션을 통해 에코할 때 환경 변수가 설정되지 않음

이 명령은 다음과 같습니다.

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

두 번째 방법은 여기에서 표준 문서를 사용하는 것입니다.

source meta-cmf-raspberrypi/setup-environment <<END_INPUT
18
END_INPUT

두 변형 모두에서 스크립트는 현재 환경에서 시작되며 해당 입력은 여기 문자열/여기 문서에서 리디렉션됩니다.

관련 정보