
어리석은 질문이라면 죄송합니다. 하지만 다음과 같은 작업을 한 줄로 수행하려고 합니다.
$ prog1 | prog2
$ prog1 | prog3
그래서 기본적으로 prog1을 실행하고 출력을 prog2와 prog3에 별도로(연결된 파이프가 아님) 파이프하고 싶습니다. 처음에는 tee를 사용하려고 했지만 출력을 파일로 덤프했기 때문에(내가 원하는 것이 아님) 올바른 것 같지 않았습니다.
$ prog1 | tee prog2 | prog3 # doesn't work - creates file "prog2"
어떤 시점에서는 출력을 두 개 이상의 프로그램으로 파이프하도록 확장하고 싶지만 지금은 간단하게 시작하겠습니다.
$ prog1 | prog2
$ prog1 | prog3
$ prog1 | prog4
...
답변1
프로세스 대체.
... | tee >(prog2) | ...
답변2
Ignacio의 답변과 유사하게 mkfifo(1)
.
mkfifo /tmp/teedoff.$$; cmd | tee /tmp/teedoff.$$ | prog2 & sleep 1; prog3 < /tmp/teedoff.$$; rm /tmp/teedoff.$$
좀 더 장황하지만 dash
. sleep 1
모든 경쟁 조건을 처리하는 것입니다 .
답변3
작은 유틸리티가 있습니다프티어떤 일을 하는가:
prog1 | ptee 2 3 4 2> >(prog2) 3> >(prog3) 4> >(prog4)
파일에 쓰는 대신,프티명령줄에 제공된 모든 fd에 씁니다.
프티의 일부입니다파이프젝.
답변4
bashism이나 특수 파일 등은 필요하지 않습니다. 어쨌든 Linux에서는 필요하지 않습니다.
% { prog1 | tee /dev/fd/3 | prog2 >&2 ; } 3>&1 | prog3
{ { printf %s\\t%s\\t%s\\n \
"this uneven argument list" \
"will wrap around" to \
"different combinations" \
"for each line." "Ill pick out" \
"a few words" "and grep for them from" \
"the same stream." |
tee /dev/fd/3 /dev/fd/4 |
grep combination >&2 ; } 3>&1 |
grep pick >&2 ; } 4>&1 |
grep line
different combinations for each *line.* Ill pick out
different combinations for each line. Ill *pick* out
different *combinations* for each line. Ill pick out
나는 그것이 동일한 스트림의 세 가지 결과일 뿐만 아니라 별도의 프로세스 일치 grep
의 결과이기도 함을 보여주기 위해 강조 표시된 결과에 별표를 표시했습니다 .grep