Estoy tratando de averiguar cómo ser notificado de que se han alcanzado varias etapas en una serie de comandos canalizados.
Por el bien de la discusión, digamos que tengo un comando como para que cualquier parte de él podría tomar mucho tiempo. Quiero ser notificado cuando cada "etapa" se ha completado por tener el script decir algo.
netstat -a | stage_complete.sh "netstat" | grep -v WAIT | stage_complete.sh "grep done"
donde stage_complete.sh es un simple bash script para say
el texto del argumento, y pasar stdin a stdout.
stage_complete.sh
OUT=$*
say "$OUT"
cat /dev/stdin
Esta idea funciona bien - excepto que say no "espera" a que la palabra se complete - simplemente empieza a decir la frase, y luego continúa inmediatamente, así que si mis comandos se ejecutan rápidamente, entonces dice "netstat" y "grep done" al mismo tiempo, superponiéndose el uno al otro.
¿Cómo puedo hacer say
¿esperar? o ¿hacer que el texto se ponga en cola y sólo lo diga una vez que el texto anterior haya terminado? He notado que los comandos así esperan a que se completen unos a otros:
say one && say two && say three
pero no veo cómo hacer que eso funcione en mis tuberías.