다음 파이프가 있다고 가정하십시오.
a | b | c | d
어떻게 완료 기다릴 수 c
(나 b
)에서 sh
나 bash
? 즉, 스크립트 d
는 언제든지 시작할 수 있으며 (대기 할 필요 는 없지만 ) c
제대로 작동 하려면 전체 출력이 필요 합니다.
유스 케이스 는 이미지를 비교 하기 difftool
위한 것 git
입니다. 호출되어 git
입력 ( a | b | c
부분) 을 처리하고 비교 결과 ( 부분)를 표시해야합니다 d
. 발신자는 a
및에 필요한 입력을 삭제합니다 b
. 즉, 스크립트에서 돌아 오기 전에 프로세스 c
(또는 b
)를 종료해야합니다. 반면에, 나는 d
사용자 입력을 기다리고 있음을 의미 하기 때문에 기다릴 수 없습니다 .
c
임시 파일에 결과를 쓰거나에서 FIFO를 사용할 수 있음을 알고 있습니다 bash
. (FIFO가 도움이 될지 확실하지 않습니다.) 임시 파일없이이 작업을 수행 할 수 sh
있습니까?
편집하다
아마도 c
(또는 b
) 프로세스 의 프로세스 ID를 신뢰할 수있는 방식으로 찾을 수 있다면 충분할 것 입니다. 그런 다음 전체 파이프를 비동기식으로 시작할 수 있으며 프로세스 ID를 기다릴 수 있습니다. 라인을 따라 뭔가
wait $(a | b | { c & [print PID of c] ; } | d)
수정 ^ 2
해결책을 찾았으며 의견 (또는 여전히 더 나은 해결책)을 환영합니다.
d
마음에들 때마다 언제든지 시작할 수 있지만 계속 진행 c
하려면 먼저 완료해야합니다.
d
때 시작할 수 있다면 정확히 무엇을 기다리고 있습니까?
d
의 출력을 사용하지 않는 c
메이크업의 어떤 이해하고 싶지 않아 보인다 d
파이프 라인의 일부를. 그러나 d
입력을 사용하는 경우 d
접근 방식이 차이를 만들기 위해 입력을 모두 읽은 후에 입력에 대해 잠시 작업해야합니다.
d
처리를 시작 하고 싶다는 뜻 입니까? 각 출력 라인 처리를 시작 하고 싶지 않습니까?c
c
d