2011-04-25 16 views
8

Tengo un script bash que está ejecutando un programa en un bucle. Quiero evaluar cada línea de la stdout y hacer algo si coincide con mi condición.evaluando líneas desde stdout

Todavía quiero poder ver stdout en la pantalla. ¿Hay una manera simple de lograr esto? ¡Gracias!

+0

¿Quiere decir que quiere ** hacer eco ** de las líneas que está analizando? –

Respuesta

12

Hay varias variantes de bucle sobre la entrada, pero una posibilidad es así:

my_cmd | while read line; do 
    echo "$line" 
    my_process "$line" 
done 
+1

tenga en cuenta que puede usar nombres de variables multiplve para leer fragmentos en ellos ('| while read id number description; do echo $ number: $ id; done') – sehe

+1

Para conservar espacios en blanco, indique la variable:' echo "$ line"; my_process "$ line" ' –

+3

Además, tenga en cuenta que poner' while' en una canalización significa que while body se ejecuta en un subproceso. Dependiendo de lo que sea 'my_process', el OP podría no querer eso, entonces:' while read -r line; hacer ... done <<(my_cmd) ' –

-1

Esto debería hacer lo que quiera:

for string in "a" "b" "c" 
do 
    output=`echo ${string}` 
    echo ${output} 
    if [ ${output} == "b" ] ; then 
     echo "do something" 
    fi 
done 

basta con sustituir el primer eco con su programa.

+0

Esto itera en una lista de literales de cadena. La pregunta específicamente solicitó líneas en STDOUT para ser el objeto iterable. –

+0

siguientes trabajos: para cadena en 'ls .' do echo $ cadena hecho – Andrey

Cuestiones relacionadas