처리의 중간 단계에서 파이프의 내용을 캡처하기 위해 tee 를 로 사용한다는 것을 알고 있습니다 ls /bin /usr/bin | sort | uniq | tee abc.txt | grep out
. 하지만 파이프를 리디렉션하고 싶지 않은 경우 어떻게 해야 합니까?uniq 뒤의 내용은 abc.txt입니다. 하지만 화면에(물론 stdout을 통해) 최종 결과는 다음과 같습니다.uniq 뒤의 중간 내용과 grep 뒤의 내용을 화면에 표시하겠습니다.
답변1
때로는 /dev/tty를 사용할 수도 있습니다...
ls /bin /usr/bin | sort | uniq | tee /dev/tty | grep out | wc
답변2
ls /bin /usr/bin | sort | uniq | tee /dev/fd/2 | grep out | wc
Linux 시스템에서는 /dev/fd/[num]
대부분의 경우 명명된 파이프와 같은 링크를 사용할 수 있습니다. 그러면 stdout이 stderr(일반적으로 터미널)로 복사됩니다.화면, 하지만 꼭 그럴 필요는 없습니다.
답변3
방법(예):
exec 3>&1; ( ls |( tee >&3 ) >/dev/null ); exec 3>&-
그러면 ls 결과가 표시됩니다.그리고열반으로 보내십시오.
3>&1
읽을 수 있는 주요 부분을 이해하려면입력/출력 리디렉션특히. 이것예.
간단히 말해서: >somefile
은 의 약어로 1>somefile
, 이는 다음을 의미합니다.somefile의 파일 핸들을 파일 설명자 1에 할당합니다(그리고 이 프로세스 범위에 대해 해당 설명자의 이전 값을 삭제합니다)..
따라서 3>&1
이는 다음을 의미합니다.파일 설명자 1(tty일 수 있지만 반드시 그럴 필요는 없음)을 (지금까지 사용되지 않은) 파일 설명자 3에 할당합니다.. 우리는 이를 &3
임시 변수 로 효과적으로 사용합니다 .
답변4
이 명령은 나에게 효과적입니다.
ls /bin /usr/bin | sort | uniq | tee /dev/pts/0 | grep out
이 명령을 사용하여 터미널이 무엇인지 확인 tty
하고 tee를 교체하여 출력을 해당 터미널로 리디렉션할 수 있습니다.
인용하다