고급 파일 설명자 리디렉션, 여러 파일 설명자를 동시에 처리하는 방법

고급 파일 설명자 리디렉션, 여러 파일 설명자를 동시에 처리하는 방법

기본적인 리디렉션을 알고 있지만 동시에 여러 파일 설명자를 어떻게 처리해야 하는지 혼란스럽습니다.

1예를 들어 FD sums 을 작성하는 2스크립트가 있습니다 3. stderr 및 stdout script::1으로 출력하고 싶습니다 .script::2script::3

이와 같은 것은 작동하지 않습니다.

./script.sh \
    1>&2 \
    2>&2 \
    3>&1

내가 원하는 리디렉션은 어떻게 작동하나요? 무엇을 검색해야 할지 모르겠습니다.

나는 이 문제를 해결할 수 있다는 것을 알고 실제로 해결책도 준비했습니다. 하지만 그러한 고급 마법을 수행하는 방법을 알고 싶습니다. 리디렉션할 항목이 있는 것은 아닐까요 /proc/self/fd/{1,2}?

 +-----------+            +-----------------+
 |           >1 ---+---- 2>                 |
 | script.sh >2 ---^      |       TTY       |
 |           >3 -------- 1>                 |
 +-----------+            +-----------------+

답변1

FD sum 을 script쓰는 기능이 있습니다 . stderr 및 stdout 으로 출력하고 싶습니다 .123script::1script::2script::3

순서를 바꾸면 됩니다:

./script.sh 3>&1 1>&2

[생략하셔도 됩니다. 2>&2그것만 있으면 됩니다.카슈미르2보다 큰 fd의 경우 ;-) ]

>fd 리디렉션 연산자에 대한 가장 큰 혼란은 사람들이 또는 문자 에 마법의 속성을 부여하는 것처럼 보인다는 사실에서 비롯됩니다 <. 실제로는>&그리고 <&100% 동일.

숫자를 볼 때마다 p>&q또는 p<&q위치 p를 직업 q으로 분석하세요 .fd_p = fd_q

그런 다음 및로 시작하여 왼쪽에서 오른쪽으로 fd1: out계산 하면 , 및 을 얻는다는 것을 쉽게 알 수 있습니다 .fd2: errfd3=fd1 fd1=fd2fd1: errfd2: errfd3: out

관련 정보