Załóżmy, że mam następującą potok:
a | b | c | d
Jak mogę czekać na zakończenie c(lub b) w shlub bash? Oznacza to, że skrypt dmoże się uruchomić w dowolnym momencie (i nie trzeba na niego czekać), ale cdo prawidłowego działania wymaga pełnego wyjścia .
Sprawa stosowanie jest difftooldla gitże porównuje obrazy. Jest wywoływany giti musi przetworzyć dane wejściowe ( a | b | cczęść) i wyświetlić wyniki porównania ( dczęść). Dzwoniący usunie dane wymagane dla ai b. Oznacza to, że przed powrotem ze skryptu proces c(lub b) musi zostać zakończony. Z drugiej strony nie mogę się doczekać, dponieważ oznacza to, że czekam na dane wejściowe użytkownika.
Wiem, że mogę zapisać wyniki cdo pliku tymczasowego lub użyć FIFO w bash. (Nie jestem jednak pewien, czy FIFO pomoże). Czy można to osiągnąć bez tymczasowych plików sh?
EDYTOWAĆ
Być może byłoby wystarczające, gdybym mógł w wiarygodny sposób znaleźć identyfikator procesu c(lub b) procesu. Wtedy cała rura mogłaby zostać uruchomiona asynchronicznie i mogłem poczekać na identyfikator procesu. Coś w stylu
wait $(a | b | { c & [print PID of c] ; } | d)
EDYCJA ^ 2
Znalazłem rozwiązanie, komentarze (lub jeszcze lepsze rozwiązania) są mile widziane.
dmożna rozpocząć, kiedy tylko chce, ale cmusi się skończyć, zanim będę mógł przejść dalej.
dmożna zacząć, kiedy chce, na co dokładnie czekasz?
dnie używa danych wyjściowych c, wydaje się, że nie ma sensu dwchodzić w skład potoku. Ale jeśli dkorzysta z danych wejściowych, to dpo ich przeczytaniu musi działać chwilę po ich przeczytaniu, aby Twoje podejście miało jakąkolwiek różnicę.
drozpocząć przetwarzanie danychcwyjściowych dopiero poczakończeniu? Nie chceszdrozpoczynać przetwarzania każdej linii wyjściowej, jaka się pojawi?