[Programación]Detectar stdin vacio!

Fabian Ezequiel Gallina galli.87 en gmail.com
Jue Ago 19 14:42:22 ART 2010


2010/8/19 Mario Oroz <jmoroz en uol.com.ar>:
> Hola gente;
>
> Necesito detectar en una  linea de comando compuesta por pipe si un
> entrada estandar es vaciá.
>
> x.txt esta vació; tiene 0 caracteres.
>
> # cat x.txt | flip -mb - | lp -s -d printer
> lp: stdin is empty, so no job has been sent.
>
> Lo que pretendo es que no aparezca ese mensaje.
>
> entonces quería detectar cuando la orden lp estaba recibiendo
> un stdin vació
>
>
> Habia pensado en esto:
>
> [vacio.sh]
> ------------
> #!/bin/bash
> # Redirecting stdin using 'exec'.
> exec 6<&0          # Link file descriptor #6 with stdin.
>                   # Saves stdin.
> if [ -s /dev/fd/6 ]; then
>    cat /dev/fd/6
> else
>    echo "No hay datos para imprimir."
> fi
> exec 0<&6 6<&-
> ------------
>
>
> # cat x.txt | flip -mb - | ./vacio.sh | lp -s -d printer
> #
>
> Pero no funciona como esperaba! ya que x.txt con y sin texto la salida por
> impresora es "No hay datos para imprimir."
>
>
> Alguien me da una pista?
> Desde ya gracias.
>

Tocando sólo de oído en bash, y si probás comparar con -z que sería
comparar si el string es nulo?

Algo así:

...
if [ -z $(cat /dev/fd/6) ]; then
   echo "No hay datos para imprimir."
else
   cat /dev/fd/6
fi
...


Saludos,
-- 
Fabián E. Gallina
http://www.from-the-cloud.com


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