Estoy tratando de averiguar cómo recibir una notificación 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 pueda tomar mucho tiempo. Quiero que se me notifique cuando se complete cada "etapa" haciendo que el script diga algo.
netstat -a | stage_complete.sh "netstat" | grep -v WAIT | stage_complete.sh "grep done"
donde stage_complete.sh es un script bash simple para say
el texto del argumento, y pasa stdin a stdout.
stage_complete.sh
OUT=$*
say "$OUT"
cat /dev/stdin
Esta idea funciona bien, excepto que, por ejemplo, "no espera" a que se complete la palabra; simplemente comienza a decir la frase, y luego continúa de inmediato, así que si mis comandos se ejecutan rápidamente, dice "netstat" y "grep done" al mismo tiempo, se superponen entre sí.
¿Cómo puedo hacer que say
espere? ¿O tiene que poner en cola el texto y solo decirlo una vez que el texto anterior se haya completado? Tenga en cuenta que me he dado cuenta de que los comandos como así se esperan unos a otros para completarse:
say one && say two && say three
¡pero no puedo ver cómo hacer que funcione en mis tuberías!