bash: mail addr <( echo '..' )

=?X-UNKNOWN?Q?Jos=E9_Angel_Rodr=EDguez_Leyva?= jar en villazul.ltu.sld.cu
Mar Abr 20 09:53:37 CLT 2004


Gracias por las respuestas, han sido de mucha ayuda.

saludos

jar

On Mon, 19 Apr 2004, Horst von Brand wrote:

> =?X-UNKNOWN?Q?Jos=E9_Angel_Rodr=EDguez_Leyva?= <jar en villazul.ltu.sld.cu> dijo:
> > On Mon, 19 Apr 2004, Mauricio Vergara Ereche wrote:
> > 
> > > > mail -s "Asunto..." addr <( sed s/expr1/expr2/ archivo )
> 
> > > El redireccionador "<" espera la entrada de un archivo por el descriptor
> > > 0... Al agregarle el paréntesis le estas diciendo que esperará que se le
> > > entregue una lista.
> 
> > No he estudiado como funcionan la entrada y salida estandar a nivel del
> > comando en el shell, asi que no puedo entender en que radica la diferencia
> > en pasarle un fichero o una lista para el comando que los recibe por la
> > entrada estandar. A fin de cuentas no serian la misma cosa? Es evidente 
> > que hay diferencias, supongo que debo investigar para poder comprenderlo.
> 
> Es bien diferente:
> 
>    less lindo-archivito
> 
> (muestra el contenido de lindo-archivito, porque less(1) lee de su(s)
> argumentos(s) si los hay) que
> 
>    ls -la | less
> 
> (muestra la salida de ls(1), si no hay argumentos less(1) lee su entrada
> standard) o que
> 
>    less <<FIN
>    Aca va chachara, que less(1) recibira en la entrada standard
>    Es una manera de crear "archivos" a ser leidos por un programa
>    invocado en un script, pero sin tener que tontear con archivos
>    temporales. Lineas aca salen tal cual.
>    FIN
> 
> (less(1) nuevamente sin argumentos) o que
> 
>    less <<<"Algun hermoso string"
> 
> (muestra "Algun hermoso string", que es ahora la entrada de less(1),
> nuevamente sin argumentos)
> 
> [Alguna idea absurda para <<<<?]
> 
> [...]
> 
> > > mail -s "Asunto..." addr <<< $(sed s/expr1/expr2/ archivo)
> > 
> > Aun asi me quedo sin entender porque s'i funciona con << o <<< y no con <
> 
> Es que
> 
>    cmd1 < $( cmd2 )
> 
> significa: Ejecute "cmd2", el resultado dejelo como argumentos (uno por
> linea) interpolados; si cmd diera el nombre de un archivo, ese recibiria
> cmd1 en su stdin. En cambio:
> 
>    cmd1 <<< $( cmd2 )
> 
> ejecuta cmd2, igual que antes; luego <<< concatena (sin saltos de linea!)
> lo que resulte, y pasa eso como entrada a cmd1. Es parecido a
> 
>    cmd2 | tr -d '\n' | cmd1
> 
> solo que seguramente mas ineficiente, y probablemente estalle si cmd2
> genera salida muy voluminosa (tr(1)).
> -- 
> Dr. Horst H. von Brand                   User #22616 counter.li.org
> Departamento de Informatica                     Fono: +56 32 654431
> Universidad Tecnica Federico Santa Maria              +56 32 654239
> Casilla 110-V, Valparaiso, Chile                Fax:  +56 32 797513
> 
> 




Más información sobre la lista de distribución Linux