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