Es posible que simplemente no sepa cómo expresar lo que estoy preguntando, pero no he podido obtener las respuestas que busco.
Entonces, lo que estoy tratando de hacer es ejecutar un comando o script dentro de un script bash, capturar el resultado línea por línea y compararlo con algún valor.
He intentado cosas en el sentido de
#!/bin/bash ./runningscript.sh | while read line; do echo "output $line" doney
#!/bin/bash ./runningscript.sh | {read line echo "output $line"}ambos parecen ejecutar el script dándome la salida normal. Lo que quiero es manejar cada línea de salida de runningscript.sh desde dentro de este script bash, ya que se emite. No quiero que espere hasta que runningscript.sh termine de ejecutarse para manejarlo.
Lo siento, soy un usuario de bash muy ocasional y simple, por lo que esta puede ser la pregunta más estúpida, pero cualquier ayuda sería muy apreciada.
Tus guiones funcionan. pero la salida no aparece hasta tarde, ¿tal vez incluso después de que se completan los comandos? Esto suele deberse al almacenamiento en búfer: runningscript.sh tiene que llenar un búfer, normalmente de 4 kB, antes de que su salida se transfiera a través de la canalización al siguiente proceso de la canalización.
Una solución es usar el comando unbuffer que es parte del paquete expect :
unbuffer runningscript.sh | something_elseEsto engaña a runningscript.sh para que piense que está escribiendo en una terminal interactiva. Como resultado, no se almacena en búfer.
Para obtener más información, consulte https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe
Alternativamente, si tiene GNU coreutils 7.5 o superior, puede deshabilitar el almacenamiento en búfer de salida con el comando stdbuf :
stdbuf -oO runningscript.sh | something_elseEl formulario que veo con más frecuencia es:
while read line; do stuff to $line done < $(somescript.sh)Para esto, debe editar runningscript.sh y poner echo o cualquier acción que desee ponerlo en su propio bucle. La tubería no puede ayudarlo porque primero completa su primer programa y luego lo envía al segundo. Si mejora su script en ejecución, no necesitará usar un script adicional.