한 명령의 출력을 다른 두 명령으로 파이프 할 수 있습니까?


답변:


56

tee명령이 원하는 것을 수행하는 것처럼 들립니다 .

열쇠는 사용하는 것입니다

>( )

위한 프로세스 교체 . 로 tee다음 패턴을 사용하십시오.

tee >(proc1) >(proc2) >(proc3) | proc4

따라서 ls두 개의 다른 grep프로그램에 대한 입력으로 출력을 사용하려면 각각의 출력 grep을 다른 파일에 저장하고 모든 결과를을 통해 파이프하려면 다음을 less시도하십시오.

ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less

의 결과는 ls -Agreps에 "piped"됩니다 . 파일은 hidden-files처음의 출력으로부터 내용물을 갖 grepnormal-files두번째 결과를 가질 것이다 grep. 모든 파일이 호출기에 표시됩니다 less. 편집 : 당신이 무엇을보고는 less은 IS 똑같은 출력ls -A아닌 결과 grep의. 에서 ls -A로 출력을 수정하려면 less(예 : 순서를 바꾸어 일반 파일이 숨겨진 파일보다 먼저 나열되도록) 다음을 시도하십시오.

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less

없다면 >/dev/null, 출력 grep들 출력에 부가 될 ls -A대신하여 대체.

출처


3
이것은 매우 좋다!
hayalci

3
쉘 스크립팅 10 년이 지난 후에도 이것을 본 적이 없기 때문에 +1입니다!
jtimberman

6

"티"를 사용하십시오.

예:

grep someSearchString someFile | tee /dev/tty | wc -l > grepresult

그러면 grep 명령 의 출력이 터미널과 wc (출력이 차례로 파일 grepresult로 경로 재 지정됨)로 전송됩니다.

"티"는 Wikipedia article tee (command)에 설명되어 있습니다. "tee 명령은 표준 입력을 읽은 다음 내용을 표준 출력에 기록하고 동시에 지정된 파일 또는 변수에 복사합니다."

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.