[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: shell scripting



* Cuenta la leyenda que Emilio J. Padrón (emilioj@mail2.udc.es) escribió:
> On Wed, Nov 27, 2002 at 12:53:57PM +0100, Victor Calzado Mayo wrote:
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> > 
> > Hola
> > On Wednesday 27 November 2002 12:14, Emilio J. Padrón wrote:
> > > Hola lista,
> > >
> > > ¿cómo puede hacer para que una variable de entorno que hereda una
> > > subshell se pueda modificar en esa subshell y el valor modificado quede
> > > actualizado en la shell padre?
> > 
> > Si se trata de pasar cosas entre una subshell y su shell madre no puedes 
> > utilizar variables de entorno, aunque no te lo podría jurar, si necesitas que 
> > un script herede las variables modificadas por otro puedes evitar usar el 
> > fork de la subshell ejecuntando el script2 con .
> > 
> > ....
> > 
> 
> 
> Gracias a todos por las respuestas. 
> 
> El problema básico me lo estoy encontrando al enlazar dos comandos con
> una tubería dentro de un scripts:
> 
> grep -h "${ETIQUETA}" ${1:-*} | while read KK0 KK1 T
> 
> en el while lo que hago es buscar los valores máximo y mínimo en una
> lista de valores (resultado del grep). El caso es que no consigo que una
> vez ejecutado el while los valores de las variables MAX y MIN
> permanezcan (los comandos enlazados por una tubería se ejecutan cada
> uno en una subshell, según tengo entendido). Es decir, algo como:
> 
> ----------------
> export MAX=0
> 
> grep -h "${ETIQUETA}" ${1:-*} | while read KK0 KK1 T
> do
> 
> if [ $MAX ]
> then
>         if [ `echo "$T<$MAX" | bc` = 1 ]
>         then
>         continue
>         fi
> fi
> MAX=$T
> done
> 
> echo $MAX
> ----------- 
> y que funcione, claro :-)
> 
> como me habéis dado varios consejos interesantes a ver si busco una
> solución/alternativa.
> 

Alternativa awk:

grep -h "${ETIQUETA}" ${1:-*} | awk '
BEGIN{ max="nada" }
{ if ( (max == "nada") || ( max < $3 ) ) max = $3; }
END{print max}'

pudiendo hacer:

maximo=`grep -h "${ETIQUETA}" ${1:-*} | awk 'BEGIN{ max="nada" }{ if ( (max == "nada") || ( max < $3 ) ) max = $3; }END{print max}'` 
echo el mas grandote es: $maximo


Espero te sirva...

-- 
Saludos,

Germán



Reply to: