Se trata de una aplicación utilizada en guiones de intérprete de comandos que muestra artilugios ("widgets, en inglés) de interfaz de usuario de texto. Utiliza la biblioteca curses o ncurses. Esta última proporciona a los usuarios la posibilidad de utilizar un ratón, por ejemplo, en un xterm.
El programa permite presentar una serie de preguntas o mensajes en pantalla mediante cuadros de diálogos desde un intérprete de comandos.
Dialog se emplea, principalmente, para la administración de sistemas, para instalación de distribuciones, y para configuración de aplicaciones, pero puede usarse para muchas otras finalidades.
En distribuciones de tipo debian se debe utilizar el comando sudo apt install dialog.
En distribuciones de tipo redhat o centos, el comando a usar es sudo yum install dialog.
SINTAXIS
Para crear cajas con una sola opción, la sintaxis del programa sería:
dialog <parámetros comunes> <parámetros de caja> <ancho de caja> <alto de caja>
Tanto "<ancho de caja>" como "<alto de caja>" se representan con valores numéricos (si se pone "0" se ajustan al contenido).
Por ejemplo, para una caja de mensaje, un comando sería "dialog --title "Título" --msgbox "Hola mundo" 0 0".
Si se pretende crear una caja con múltiples opciones (tipo lista de verificación, o radiolista), la sintaxis es:
dialog <parámetros comunes> <parámetros de caja> <ancho de caja> <alto de caja> <número de opciones visibles>.
Si se escribe "0" en "<número de opciones visibles>" se ajusta automáticamente al nº de opciones.
Por ejemplo, un comando para una caja de lista de verificación sería "dialog --checklist "Escoja las opciones deseadas:" 0 0 0 1 taxi on 2 "Autobús" on 3 coche off"
PARÁMETROS COMUNES
Se trata de parámetros que están presentes en la mayoría de los tipos de cuadros de dialogo de Dialog.
Títulos
- --title: Se emplea para ponerle título al cuadro de diálogo.
- --backtitle: Título del fondo de la ventana.
Cambio de texto de botones
- --yes-label: Cambia la palabra "YES" de los cuadros de diálogo por la que escoja el usuario.
- --ok-label: Cambia la palabra "OK" de los cuadros de diálogo por la que escoja el usuario.
- --cancel-label: Cambia la palabra "CANCEL" de los cuadros de diálogo por la que escoja el usuario.
- --exit-label: Cambia la palabra "EXIT" de los cuadros de diálogo por la que escoja el usuario.
- --no-label: Cambia la palabra "NO" de los cuadros de diálogo por la que escoja el usuario.
- --nook: Elimina el botón de "OK" del cuadro de diálogo, por lo que hay que pulsar el botón "enter" para entrar.
Salida del comando
Estas variables permiten decidir por donde saldrán las opciones escogidas en el comando. Predeterminadamente saldrán por la salida de error, pero es posible sacarlo a pantalla.
- --stderr: Salida del comando a la salida de error. Si se elige esta opción es posible sacar el resultado a un archivo añadiendo al final de la línea de dialog: 2><archivo donde guardar la salida>.
- --stdout: Con esta opción mostrará en pantalla la salida del comando. Se suele utilizar cuando se pretende almacenar en una variable el comando pero no se la quiere volcar a un archivo temporal.
Ejemplo de caja (LinuxCommand.org) |
PARÁMETROS DE CAJA
Los parámetros de caja más habituales son:
- --msgbox: Caja de mensaje que sirve para poner un mensaje en pantalla hasta que el usuario pulse entrar.
- --yesno: Menú "SI/NO" que sirve para responder preguntas con respuesta SI/NO; si la respuesta es "SI" devuelve 0 si la respuesta es "NO" devuelve 1.
- --infobox: Caja de información que muestra en pantalla la información que el usuario quiera [es conveniente añadir un sleep (comando que espera x segundos para continuar) para poder verla].
- --inputbox: Caja de entrada que se utiliza para recoger datos.
- --passwordbox: Caja de contraseña que es igual que la caja de entrada pero sin mostrar los caracteres que se escriben.
- --textbox: Caja de texto que es un visor de archivos y nos muestra el archivo que se le indique.
- --menu: Caja de menú que permite escoger una opción entre varias opciones numeradas.
- --checklist: Caja de lista de verificación que consiste en un menú con varias opciones de las que es posible escoger varias. Las opciones que se pongan en "on" estarán encendidas y las que se pongans en "off" apagadas. Dentro de --checklist existe el parámetro --separate-output, que devuelve una línea por cada selección realizada (se suele emplear para ejecutar diferentes comandos por cada selección realizada).
- --radiolist: Caja de radiolista que consiste en un menú con varias opciones de las que se puede escoger sólo una.
- --calendar: La caja de calendario consiste en un calendario donde el usuario puede escoger una fecha.
Para ver una lista completa de los parámetros de caja se puede acudir al archivo de ayuda de Dialog (comando man dialog).
Ejemplo de caja de radiolista (LinuxCommand.org) |
USO DE DATOS OBTENIDOS
Si se pretende utilizar en un guión los datos recogidos por los cuadros de diálogo, se pueden emplear estos dos métodos: redireccionar la salida de Dialog a un archivo, o almacenar la respuesta en una variable.Redireccionar la salida de Dialog a un archivo
Es posible almacenar la salida del comando dialog a un archivo, que normalmente se pondrá en el directorio "tmp" y se borrará después de su uso. Véase el siguiente ejemplo de Aplicaciones y sistemas.
#!/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
Esto se consigue creando una función y llamándola desde una variable. Véase el siguiente ejemplo de Aplicaciones y sistemas.
#!/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
En resumen, Dialog es una excelente herramienta para crear menús para guiones que permiten hacer programas para terminales y equipos con sistemas operativos sin interfaz gráfica.
Espero que la presente entrada haya sido de interés para el lector. Si es así, aguardo que éste la comente y/o la comparta, por favor.
No hay comentarios:
Publicar un comentario
Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.