기본적인 리디렉션을 알고 있지만 동시에 여러 파일 설명자를 어떻게 처리해야 하는지 혼란스럽습니다.
1
예를 들어 FD sums 을 작성하는 2
스크립트가 있습니다 3
. stderr 및 stdout script::1
으로 출력하고 싶습니다 .script::2
script::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 으로 출력하고 싶습니다 .1
2
3
script::1
script::2
script::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: err
fd3=fd1 fd1=fd2
fd1: err
fd2: err
fd3: out