한동안 이 질문이 궁금했는데 항상 물어보는 걸 잊어버렸어요
다음과 같은 파이프라인이 있는 경우:
a | b
다음과 같이 환경 변수를 개별적으로 설정하는 방법이 있습니까?
x="foo" a | x="bar" b
답변1
표준은 특정 환경 설정 전에 쉘 매크로 확장이 발생하도록 정의하기 때문에 수행하려는 작업이 표준과 충돌합니다.
special shell builtin
POSIX에서는 전체 셸에 영향을 미치기 위해 선행 환경 문이 필요하므로 원하는 대로 수행할 수 있는 방법도 있습니다 . 명령 :
은 다음과 같습니다 special shell builtin
.
노력하다:
(x="foo" :; a) | (x="bar" :; b)
메인 셸 프로세스가 영향을 받지 않도록 하려면 이 작업을 하위 셸에서 수행해야 합니다. OP가 그의 의견에서 예상한 내용을 교체 a
하고 인쇄하면 b
다음과 같습니다.echo $x,
(x="foo" :; echo $x) | (x="bar" :; echo $x)
음, 파이프 왼쪽의 출력이 손실됩니다...
그러나 이미 서브쉘을 사용해야 하므로 다음을 사용할 수 있습니다.
(x="foo"; echo $x) | (x="bar"; echo $x)
구문을 사용하여 먼저 서브쉘에서 쉘 변수를 설정한 다음 이를 사용합니다. x
명령에서 환경으로 필요한 경우 export x
후자의 예에서 필요합니다.