[eside-ghost] Bash - Filtrando salida de proceso mientras se guarda en variable
Jon Valdés
juanval en gmail.com
Mie Ago 1 13:41:39 CEST 2012
2012/8/1 Bruno Gonzalez <stenyak en gmail.com>:
> 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
Wow! Funciona perfect, muchas gracias! :)
Da gusto tener esta panda de gurús de bash a mano :-P
> 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
> _______________________________________________
> eside-ghost mailing list
> eside-ghost en listas.deusto.es
> https://listas.deusto.es/mailman/listinfo/eside-ghost
Más información sobre la lista de distribución eside-ghost