sed
bash 하위 쉘 출력을 기본/루트 쉘 환경 변수에 넣는 방법은 무엇입니까 ?
그것은 실패할 것이다,
v=`echo NO |tee >(sed 's/^/&YES/' )`
실제 상황을 해결하는 방법은 무엇입니까?
답변1
작동합니다(Linux Mint 18.1, GNU bash, 버전 4.3.48).
Paul--) unset v
Paul--) v=`echo NO |tee >(sed 's/^/&YES/' )`
Paul--) declare -p v
declare -- v="NO
YESNO"
당신은 그것이 무엇을 할 것으로 기대합니까? 문제는 프로세스 대체 구문인 >( .. )를 사용하고 있다는 것입니다.
tee는 NO를 복사하여 sed를 통해 전송합니다. 따라서 tee는 원시 데이터를 NO\n
표준 출력으로 출력하는 반면 sed는 별도의 프로세스로 실행되어 NOYES\n
표준 출력으로 보냅니다. 백틱으로 된 명령 대체는 v
.
sed는 별도의 프로세스에서 실행되며 과거에는 bash가 완료될 때까지 기다리지 않는 문제가 있었습니다. 따라서 특히 두 번째 프로세스에 시간이 걸리는 경우 이 구성에서 경쟁 조건이 발생할 수 있습니다.