[eside-ghost] Bash - Filtrando salida de proceso mientras se guarda en variable

Bruno Gonzalez stenyak en gmail.com
Mie Ago 1 13:10:17 CEST 2012


Qué diablos, mételo a una función y listo:

function filter
{
    local output=""
    while read line
    do
        echo "$line"
        output="$output\n$line"
    done
    #after EOS
    printf $output #or whatever
}
mi_comando | filter

2012/8/1 Bruno Gonzalez <stenyak en gmail.com>:
> Si, al pipear while, bash lo pone automaticamente en una subshell, y
> "pierde" los valores locales al salir.
>
> Mira a ver si jugando con exec puedes apañártelas para no necesitar un
> pipe en el while.
> Pero lo más sencillo igual es pasarlo a ksh, que se comporta de forma
> más sana, sin subshells ni historias.
> O bien tirar del archivo intermediario (si no puedes depender de que
> ksh esté instalado en los equipos).
>
> 2012/8/1 Jon Valdés <juanval en gmail.com>:
>> 2012/8/1 Pablo Garaizar Sagarminaga <garaizar en deusto.es>:
>>> Aupa,
>>>
>>> El Wed, 1 Aug 2012 12:04:09 +0200
>>> Bruno Gonzalez <stenyak en gmail.com> comentaba:
>>>
>>>> Uhmm... por si no es muy obvio, se me ha olvidao decir que ese script
>>>> toma como input a stdout. Es decir lo guardas como "filter.sh", y
>>>> luego lo usas tal que:
>>>> $ comando.sh | ./filter.sh > /tmp/passthrough_del_stdout.txt
>>>
>>> Si Jon lo quiere dentro de su script, siempre puede cambiar el
>>>
>>> while read line
>>>
>>> por:
>>>
>>> comando | while read line
>>>
>>> y dejar el resto igual. Creo que debería funcionar :-)
>>
>> Lo he estado intentando, y no lo consigo.
>> Sospecho que el "while" crea un entorno distinto que no comparte las
>> variables con el script original, porque esto no tira:
>>
>> output=""
>> find . | while read line
>> do
>>     printf "$line\n"
>>     output="$output\n$line"
>> done
>>
>> echo "********************"
>> printf "$output\n"
>>
>> He probado a ponerle un export al output dentro del while, y tampoco.
>> _______________________________________________
>> eside-ghost mailing list
>> eside-ghost en listas.deusto.es
>> https://listas.deusto.es/mailman/listinfo/eside-ghost
>
>
>
> --
> Saludos,
>      Bruno González
>
> _______________________________________________
> Jabber: stenyak AT gmail.com
> http://www.stenyak.com



-- 
Saludos,
     Bruno González

_______________________________________________
Jabber: stenyak AT gmail.com
http://www.stenyak.com


Más información sobre la lista de distribución eside-ghost