rc=$(...)
는 리턴 코드가 (...)
내에서 코드 파일 기술자 (FD) 1
에 인쇄되어 어떤된다는 것을 의미합니다. 그래서, 어떻게 든 somescript.sh
출력은 fd 1
에서 벗어나야하고 나중에 다시 가져와야합니다. echo
라인은 fd 3
에 somescript.sh
의 리턴 코드를 출력합니다. 그런 다음 3>&1
은 저장된 반환 코드를 fd 1
으로 보냅니다. 여기서 $(...)
이이를 나타냅니다. 그러나 이것은 이전 fd 1
({somescript 2>&1 } | tee
에서)이 갈 곳이 없다는 것을 의미합니다. 따라서 이전 fd 1
은 fd 4
으로 >&4
으로 리디렉션됩니다 (입력측은 사용되지 않으므로 4>&-
으로 닫힙니다). 그런 다음 $(...)
이 끝나면 4>&1
은 somescript|tee
의 출력을 다른 프로그램이 예상하는 fd 1
에 다시 출력합니다.
휴! >&4
없이
은
, somescript.sh
의 출력과 echo "$?"
의 출력이 때문에 3>&1
의 FD 1
에 혼합 될 것이다. 따라서 fd 4
은 fd 1
이 리턴 코드를 전달하는 데 사용되는 동안 somescript.sh
의 실제 출력을 보관하는 펜입니다.
출처
2016-10-04 14:50:19
cxw
필자는 항상 $ (...)가 stdout에서 읽는다고 생각했는데, 이는 fd 1이 일반적으로 가리키는 점이지만 fd 1에서 읽으면 많은 의미가 있습니다. 감사. – dood
fd 1은 표준 출력을 가리 키지 않습니다; 그것은 * 표준 출력입니다. – chepner
@chepner ah ok, 해명 해 주셔서 감사 드리며, 보통 stdout은 터미널을 가리 킵니다. – dood