hola, ya hace tiempo que no escribo unas líneas como tocan, sobre lo que más me gusta, que es la creación. Aunque sea un simple script. Pero es un script muy majo, ya que utiliza dialog y he realizado un relleno dinámico de un –radiobox (cosa que parece sencilla, pero no lo es)
Tenia en mente preparar uno, para dejar una cuestión al aire, una cosa que seguro todos observamos, podemos con dialog, disimular el flujo de caracteres e acciones que se está realizando, ya que al iniciarse nos cubrirá nuestra shell o terminal con un velo, con lo que el usuario simplemente confia en aquello que ve ante sus ojos.
Con ello, espero que no se tome como base, de aquellos que hemos visto las enseñanzas win, que entendemos que es totalmente imposible, que aquello de lo que se nos informa sea realmente lo que está ocurriendo, o mejor, que ocurre aquello que dicen, pero mucho mucho más que debemos imaginar. Seguramente, habreis oido muchas veces ese rascar de los discos, cuando en la pantalla se te muestra una información que no concuerda con tu realidad. ¿Cómo puede ser que tarde tanto en realizar esta acción, si manualmente la realizo en un flash? Sobre todo en las instalaciones. Bien, pués sin entrar en guerras ni guerrillas, vamos allà con dialog y Xdialog.
Xdialog y dialog nos van a ayudar a aquellos que nos gusta hacer scripts, a decorarlos y dotarlos de interfaces, para que el usuario no se asuste delante de aquello que puede que no comprenda, como es un volcado de caracteres en pantalla, que para los neófitos puede resultar asustante. Pueden ver pasar un monton de caracteres delante de sus narices y asustarse, relacionandolo con cosas como Matrix o Natas.
Entonces a la labor. Queremos que no se asusten y que vean que las cosas son sencillas de entender. Ojos que no ven, corazón que no siente.
Vamos a entender entonces que nos sirve como from ends de los scripts. el que he creado, no va a salir al sistema global, ya que si fuesemos hacia allí, ya me veo a la peña partiendose el pecho. Ya que a nadie se le ocurriría ejecutar un script otorgandole privilegios de administrador ¿VERDAD!? suerte de las md5 y similares que ayudan a comprender.
Como soy un vicioso de la multimedia, pues me centraré en el mplayer, que siempre digo que lo haré algo para él y no lo hago.
Xdialog y dialog son muy fáciles de entender, podemos practicar con ellos desde nuestra shell preferida, además su página man reflejan todo lo que se puede hacer con ello indicando simplemente las opciones a utilizar en cada formulario, o de una forma muy rápida, tenerlo todo a mano con –help
~ $ Xdialog –help &
Por ejemplo esto lo podemos probar a ejecutar desde nuestra consola faborita o desde el menu de ejecución
Xdialog –wrap –title “Todo Bien” –help “Pues ya ves que poca” –yesno “¿Se puede seguir con ello?” 0 0
la forma de utilizarlo es la siguiente
Xdialog [<GTK+ options>] [<common options>] [<transient options>] <box option> …
Donde como siempre, aquello encerrado entre corchetes es opcional. En la ayuda se ven claramente diferenciada las diferentes opciones, y las respuestas a cada acción donde las respuesta 0 es que se ha aceptado todo, 1 es que se canceló y 255 se cerro. Si están encadenados y en algún momento se cancela o se cierra, se salta los formularios siguiente para llegar al script y a su toma de control. En el ejemplo chain esto se ve muy claramente:
Y si os gusta fijaros en este script en el que tendréis también como dije antes una carga dinámica del las opciones del radiolist, tamibén aplicable a los menús
#!/bin/sh
app=mplayer
configfile=~/.mplayer/config
Dialog=dialog# Comprobar la existencia de dialog
which $Dialog >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo "$Dialog no existe, no continuaremos"
exit 1
fi$Dialog --title 'Demo by AnimAlf' --no-collapse --msgbox \
"Desmostración del uso de dialog y Xdialog" 0 0which Xdialog >/dev/null 2>&1
if [ $? -ne 0 ]
then
$Dialog --title 'Demo by AnimAlf' --no-collapse --msgbox \
"Xdialog no existe, da igual ..." 0 0
else
Dialog=Xdialog
$Dialog --title 'Demo by AnimAlf' --no-collapse --msgbox \
"He localizado Xdialog y continuaré con él" 0 0 0
fi# comprobar que la aplicación existe.
which $app >/dev/null 2>&1
if [ $? -ne 0 ]
then
$Dialog --title 'Demo by AnimAlf' --no-collapse --msgbox \
"El $app no existe, no continuaremos(" 0 0
exit 1
fi# Rellenar un array con los codecs de salida de video
codecs=($($app -vo help | sed -n "s/^\t\(.*\)\t\(.*\)/\1/p"))
descrcode=($($app -vo help | sed -n "s/^\t\(.*\)\t\(.*\)/\2/p" | sed -e "s/\ /./g"))
$Dialog --title 'Demo by AnimAlf' --no-collapse --msgbox "se han \
detectado ${#codecs[*]} codecs en su compilación para mplayer" 0 0# expresión regular que lee el contenido del archivo y quita los espacios en blanco
opciones=($(cat $configfile | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e '/^#/d' -e '/^$/d'))
$Dialog --title 'Demo by AnimAlf' --no-collapse --msgbox \
"En su archivo de configuración existen ${#opciones[*]} opciones configuradas" 0 0# Comprobar que en las opciones exista vo
for unaLinea in ${opciones[*]}
do
#echo $unaLinea
if [ $(echo $unaLinea | grep "^vo") ]
then
voOK=$(echo $unaLinea | sed -n "s/.*=\(.*\)/\1/p")
fi
done
if [ $voOK ]
then
$Dialog --title 'Demo by AnimAlf' --no-collapse --msgbox \
"vo ya está definido en su archivo de configuración [$voOK]" 0 0
else
$Dialog --title 'Demo by AnimAlf' --no-collapse --msgbox \
"vo no existe en su configuración" 0 0
fi$Dialog --title 'Demo by AnimAlf' --no-collapse --backtitle "Elegir el driver de video por defecto" \
--radiolist "Bien, llega el momento de la elección, como no me voy a complicar \
mucho la vida y como esto es una demo para ver el funcionamiento de estos formularios, \
sólo permite la elección de un sólo driver. La configuración permite que se pongan unos \
cuantos en el orden de preferencia, así como poner varias de sus opciones. Elige un modo \
para comprobar el funcionamiento, el archivo original se graba con la extensión como fecha, \
por lo que lo podrás recuperar, si lo tenías muy currado, si sigues, no perderás las opciones \
que tuvieses, pero sí los comentarios (si vo está configurado).\n\n
Que driver utilizará mplayer por defecto ?" 0 0 0 \
$(let X=0
let TMP=${#codecs[*]}
for i in ${codecs[*]} ; do
echo -n "${codecs[$X]}"
echo -n " "
echo -n "${descrcode[$X]}"
echo -n " "
if [ ${codecs[$X]} = $voOK ]; then
echo -n on
else
echo -n off
fi
if [ $X -lt $TMP ]; then
echo
fi
let X=$X+1
done) 2>/tmp/checklist.tmp.$$retval=$?
choice=`cat /tmp/checklist.tmp.$$`
rm -f /tmp/checklist.tmp.$$case $retval in
0)
echo "# Configuración guardada por la demo de dialog Wadalbertiana" > $configfile
for unaLinea in ${opciones[*]}
do
if [ $voOK ]
then
if [ $(echo $unaLinea | grep "^vo") ]
then
echo "vo=$choice" >> $configfile
else
echo $unaLinea >> $configfile
fi
else
echo $unaLinea >> $configfile
fi
done
if [ $voOK ]; then
voOK=$voOK;
else
echo "vo=$choice" >> $configfile
fi
;;
1)
echo "Has cancelado."
exit 1
;;
255)
echo "Has cerrado."
exit 1
;;
esac
clear
echo "EsosTodo Amigos!!"
Hay varias cosas que se pueden mejorar, asín que si aportaris mejoras nos ayudaremos a comprender mejor. Sobre todos aquellos que somos autodidactas … el if final de escritura al achivo de configuración es ridículo, no supe como poner un ifnot
) también se podría sustituir el modo de lectura por lectura esctiruta <> y alguna cosa más …
Saludos
(" 0 0