it-swarm-ko.com

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

한 명령의 출력을 다른 두 명령의 입력으로 동시에 파이프하려면 어떻게해야합니까?

28
Richard Hoskins

tee 명령이 원하는 작업을 수행하는 것 같습니다.

열쇠는 사용하는 것입니다

>( )

프로세스 대체 . tee에서 다음 패턴을 사용합니다.

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

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

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

ls -A의 결과는 greps 모두에 "파이프"됩니다. hidden-files 파일에는 첫 번째 grep의 출력 내용이 포함되고 normal-files에는 두 번째 grep의 결과가 포함됩니다. 모든 파일이 호출기 less에 표시됩니다. [~ # ~] 편집 [~ # ~] : less에서 보는 것은 greps의 결과가 아니라 ls -A의 정확한 출력 이 동일합니다. 출력을 ls -A에서 less로 수정하려면 (예 : 숨겨진 파일보다 먼저 일반 파일이 나열되도록 순서를 바꾸는 경우) 다음을 시도하십시오.

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

>/dev/null가 없으면 greps의 출력이 ls -A의 출력에 대체되는 대신 추가됩니다.

소스

59
Ben

"티"를 사용하십시오.

예:

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

그러면 grep 명령의 출력이 터미널과 wc (그 출력이 차례로 grepresult 파일로 리디렉션 됨)로 전송됩니다.

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

6
Peter Mortensen