Supongamos que tengo la siguiente tubería:
a | b | c | d
¿Cómo puedo esperar para completar c(o b) en sho bash? Esto significa que la secuencia de comandos dpuede iniciarse en cualquier momento (y no es necesario esperar), pero requiere que la salida completa de cfuncione correctamente.
El caso de uso es difftoolpara gitcomparar imágenes. Es invocado por gity necesita procesar su entrada (la a | b | cparte) y mostrar los resultados de la comparación (la dparte). La persona que llama eliminará la entrada que se requiere para ay b. Esto significa que antes de regresar del script, el proceso c(o b) debe finalizar. Por otro lado, no puedo esperar dporque esto significa que estoy esperando la entrada del usuario.
Sé que puedo escribir los resultados cen un archivo temporal, o tal vez usar un FIFO en bash. (Sin embargo, no estoy seguro si el FIFO ayudará). ¿Es posible lograr esto sin archivos temporales sh?
EDITAR
Quizás sería suficiente si pudiera encontrar la identificación del proceso del c(o b) proceso de manera confiable. Entonces, toda la tubería podría iniciarse de forma asincrónica, y podría esperar una ID de proceso. Algo en la línea de
wait $(a | b | { c & [print PID of c] ; } | d)
EDITAR ^ 2
He encontrado una solución, los comentarios (o soluciones aún mejores) son bienvenidos.
des libre de comenzar cuando lo desee, pero cdebe terminar antes de que pueda seguir adelante.
dpuede comenzar cuando le gusta, ¿qué está esperando exactamente?
dno utiliza la salida de c, parece que no tiene sentido formar dparte de la tubería. Pero si dusa la entrada, entonces ddebe trabajar un poco en su entrada después de haberla leído todo para que su enfoque marque la diferencia.
dcomenzar a procesarcla salida solo después de que sechaya completado? ¿No deseadcomenzar a procesar cada línea de salida tal como viene?