Dialog es un comando de GNU/linux que permite crear cuadros de dialogo en el terminal para que los utilices en tus scripts de programación, voy a mostrarte como usar este comando.
Para la realización de este articulo me he basadoen el manual del comando y en las siguientes páginas webs darles mis mas sinceros agradecimientos a los creadores.
http://ovtoaster.com/scripts-en-linux-con-estilo/
http://linuxgazette.net/101/sunil.html
Los colores en aplicaciones y sistemas
Textos escrito en la línea de comandos: Azul
Salida del en la línea de comandos: Verde
Nombres de archivos y contenido de archivo: Marrones
Instalación de dialog
Para poder utilizar esta herramienta en linux lo primero que has de hacer es instalarla
Ubuntu
sudo apt-get install dialog
Debian
apt-get install dialog
Red hat
yum install dialog
Suse
zypper install dialog
Sintaxis
Para cajas con solo una opción.
Tanto <ancho-de-caja> <alto-de-caja> se representa con valores numéricos si ponemos 0 se ajustan al contenido.
dialog <opciones-comunes> <opciones de caja> <ancho-de-caja> <alto-de-caja>
Ejemplo:
dialog --title "Titulo" --yesno "¿Te gusta el color rojo?" 0 0
Para cajas con multiples opciones
Es solo es para las cajas de tipo checklist, menú o radiolist. Si ponemos 0 en <numero-de-opciones-visibles> se ajusta automáticamente al nº de opciones.
dialog <opciones-comunes> <opciones de caja> <ancho-de-caja> <alto-de-caja> <numero-de-opciones-visibles>.
Ejemplo:
dialog --checklist "Escoge las opciones que desees:" 0 0 0 1 queso on 2 "Mostaza" on 3 anchoas off
Opciones comunes
Son opciones que están presentes en la mayoría de los tipos de cuadros de dialogo de «dialog» las mas comunes son las siguientes:
Títulos
–title
Se utiliza para ponerle título al cuadro de dialogo.
–backtitle
Es el titulo del fondo de la ventana.
Cambiar texto botones
–yes-label
Cambia la palabra YES de los cuadros de dialogo por la que tu desees.
–ok–label
Cambia la palabra OK de los cuadros de dialogo por la que tu desees.
–cancel-label
Cambia la palabra CANCEL de los cuadros de dialogo por la que tu desees.
–exit-label
Cambia la palabra EXIT de los cuadros de dialogo por la que tu desees.
–no-label
Cambia la palabra NO de los cuadros de dialogo por la que tu desees.
–nook
Quita el botón de OK del cuadro de dialogo hay que pulsar enter para entrar.
Salida del comando
Estas variables permiten decidir por donde saldrán las opciones escogidas en el comando por defecto saldrán por la salida de error si queremos podemos sacarlo a pantalla.
–stderr
Salida del comando a la salida de error si escogemos esta opcion podemos sacar el resultado a un archivo añadiendo al final de la linea de dialog:
2><archivo donde guardar la salida>
–stdout
Con esta opción nos mostrara en pantalla la salida del comando yo la utilizo cuando quiero almacenar en una variable el comando pero no quiero volcarla a un archivo temporal, mas adelante en los ejemplos veremos como.
Opciones de caja
Caja de mensaje (–msgbox)
Sirve para poner un mensaje en pantalla hasta que el usuario pulse enter.
dialog --title "Título" --msgbox "Hola Mundo" 0 0
Menú SI/NO (–yesno)
Sirve para responder preguntas con respuesta SI/NO si la respuesta es SI devuelve 0 si la respuesta es NO devuelve 1
dialog --title "Titulo" --yesno "¿Te gusta el color rojo?" 0 0
Caja de información (–infobox)
Esta caja muestra en pantalla la información que nosotros queramos es conveniente añadir un sleep (comando que espera x segundos para continuar) para poder verla.
dialog --infobox "Espera 4 segundos" 0 0 ; sleep 4
Caja de entrada (–inputbox)
Se utiliza para recoger datos.
dialog --title "nombre" --inputbox "Pon tu nombre:" 0 0
Caja de password (–passwordbox)
Es igual que la caja de entrada pero no se muestran los caracteres que se escriben.
dialog --title "Contraseña" --passwordbox "Pon tu contraseña:" 0 0
Caja de texto (–textbox)
La caja de texto es un visor de archivos y nos muestra el archivo que le indiquemos.
dialog --title "archivo fstab" --textbox /etc/fstab 0 0
Caja de menu (–menu)
Nos permite escoger una opcion entre varias opciones numeradas
dialog --menu "La mejor tortilla es:" 0 0 0 1 "con cebolla" 2 "sin cebolla" 3 "con piminetos"
Caja de checklist (–checklist)
Es un menú con varias opciones de las que podemos escoger varias. Las opciones que pongamos en on estarán encendidas y las que pongamos en off apagadas.
dialog --checklist "Escoge las opciones que desees:" 0 0 0 1 queso on 2 "Mostaza" on 3 anchoas off
Una mención especial dentro de checklist para la opción –separate-output que nos devuelve una linea por cada selección realizada muy útil para ejecutar diferentes comandos por cada selección realizada.
Caja de radiolist (–radiolist)
Es un menu con varias opciones de las que podemos escoger solo una.
dialog --radiolist "Escoge tu tortilla favorita:" 0 0 0 1 "Con cebolla" off 2 "Sin cebolla" on 3 "De pimientos" off 4 "De esparragos" off
Caja de calendario (–calendar)
Es un calendario donde podemos escoger una fecha.
dialog --title "Calendario" --calendar "Escoge una flecha" 0 0
Otras opciones de caja
Ademas de las opciones de caja que hemos visto hay otras opciones que pueden ser interesantes de utilizar para conocerlas no dudes en acudir a la ayuda.
man dialog
Como utilizar los datos obtenidos con dialog
Para poder utilizar en un script los datos recogidos por los cuadros de dialogo de dialog hay varaias opciones que yo he encontrado, pero seguro que a vosotros se os ocurren mas no dudeis en comunicarmelas y las añadiré en el post.
Redireccionar la salida de dialog a un archivo.
Podemos almacenar la salida del comando dialog a un archivo, normalmente lo pondremos en la carpeta /tmp y lo borraremos después de utilizarlo, a continuación os pongo un script con un ejemplo explicado.
#!/bin/bash
# Por Ignacio Alba Obaya
# https://aplicacionesysistemas.com
# ejecutamos el cuadro de dialogo poniendo al final 2>/tmp/nombre.tmp.$$
# almacenamos en un archivo el nombre introducido.
# recordar que 2> redirecciona la salida de error a un archivo.
dialog --title "Nombre" --inputbox "Pon tu nombre:" 0 0 2>/tmp/nombre.tmp.$$
# borramos la pantalla
clear
# mostramos el nombre almacenado
cat /tmp/nombre.tmp.$$
# borramos el archivo con el nombre
rm -f /tmp/nombre.tmp.$$
# hacemos un salto de linea para que no se nos amontone con el prompt
echo -e "\n"
Almacenar la respuesta en una variable.
Para almacenar el resultado lo realizaremos creando una función y llamandola desde una variable.
#!/bin/bash
# Por Ignacio Alba Obaya
# https://aplicacionesysistemas.com
# Almacenar el resultado de dialog en una variable
# creamos la funcion fundialog
fundialog=${fundialog=dialog}
# creamos una variable fecha con la salida de dialog
# redireccinando con --stdout la salida de dialog
# a la salida estandar, fijate en que la función esta entre
# acentos de los de la tecla [ si no es asi no funciona.
fecha=`$fundialog --stdout --title "Calendario" --calendar "Escoge una fecha" 0 0`
# Mostramos la fecha capturada
echo $fecha
Como gestionar salidas de checklist
También tenemos que poder gestionar multiples opciones de salida cuado tenemos un checklist de tal manera que cada opción desencadene diferentes eventos. Una manea de hacer esto es la siguiente:
#!/bin/bash
# Por Ignacio Alba Obaya
# https://aplicacionesysistemas.com
# Creamos la varaible funcheck en la que almacenamos la
# orden dialog con la opción --separate-output
funcheck=(dialog --separate-output --checklist "Selecciona los grupos a los que pertenece:" 0 0 0)
# Definimos las opciones que apareceran en pantalla
# aparecerán encendidas las que marquemos con on.
opciones=(1 "opción 1" on
2 "opción 2" off
3 "opción 3" off
4 "opción 4" off
5 "opción 5" on
6 "opción 6" off
7 "opción 7" off)
# Creamos la funcion selecciones que ejecuta funcheck con opciones
# y reenvia la salida al terminal para que el for siguiente ejecute
# los comandos
selecciones=$("${funcheck[@]}" "${opciones[@]}" 2>&1 >/dev/tty)
# limpiamos la pantalla
clear
# añadimos un for para que ejecute un comando en función de
# las selecciones realizadas puedes cambiar el echo por
# cualquier comando o secuencias de comandos
for seleccion in $selecciones
do
case $seleccion in
1)
echo "Escogiste la opción 1"
;;
2)
echo "Escogiste la opción 2"
;;
3)
echo "Escogiste la opción 3"
;;
4)
echo "Escogiste la opción 4"
;;
5)
echo "Escogiste la opción 5"
;;
6)
echo "Escogiste la opción 6"
;;
7)
echo "Escogiste la opción 7"
;;
esac
done
Conclusiones sobre dialog
En mi opinión dialog es una forma elegante de crear menús para nuestros scripts permite de manera sencilla crear programas para terminal.
Darte las gracias por leer nuestro blog espero que te guste nuestro contenido, te pediria que no olvides dar +1 o compartir en las redes sociales, no ganamos nada con este blog y es para nosotros cada me gusta o mas 1 es una pequeña recompensa 😀
Saludos excelente post, muy bien explicado lo referente a la interfaces gráfica en la terminal linux.
fue de gran ayuda tu blog hermano, gracias
tu blog nos ayude mucho, gracias 😀
ayudo*
Muchas gracias!
fue de mucha ayuda!
Muchas gracias, muy buen blog!
Gracias
Sorry dude but your bash scripts contain errors.
Example:
1- Your case statement is wrong:
«$ selection in case» should be «case $selection in» <– notice the space between "$" and "selection"
2- Your variable assignments and access are wrong in some places:
"$ selection in case" should be "case $selection in" <– notice the space between "$" and "selection"
The same with "funcheck =(dialog….." , it should be "funcheck=(dialog …"
and also
"options =(1…. "
as well as
"selections = $("${…."
Small, stuff probably happened because of your blogging software.
Otherwise, nice post!
Cheers.