다음 파이프가 있다고 가정하십시오.
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처리를 시작 하고 싶다는 뜻 입니까? 각 출력 라인 처리를 시작 하고 싶지 않습니까?ccd