Cómo usar widgets ncurses en scripts de shell en Linux

Cómo usar widgets ncurses en scripts de shell en Linux

En este tutorial aprenderemos los conceptos básicos del utilidad de diálogo, para usar ncurses widget en nuestros scripts de shell. Veremos cómo instalar el diálogo en las distribuciones de Linux más utilizadas, algunas de las opciones comunes que podemos usar para alterar el comportamiento del diálogo, cómo usar algunos widgets; entre los demás: caja de entrada, Lista de Verificación, radiolista y sí No. Finalmente, veremos cómo usar los datos obtenidos por el procesamiento de widgets.

En este tutorial aprenderás:

  • Cómo instalar la utilidad de diálogo en Linux
  • ¿Cuáles son las opciones de diálogo más relevantes?
  • Cómo usar los widgets de InputBox, Vista de verificación, Radiolist, Passwordbox, Msbox, Calendar y Yesno
  • Cómo administrar los datos derivados del procesamiento de widgets


Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Independiente de la distribución
Software La utilidad de diálogo es necesaria para seguir este tutorial
Otro Familiaridad con la interfaz de línea de comandos y las redirecciones de shell
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Instalación en Linux

El diálogo La utilidad está disponible en todas las principales distribuciones de Linux Repositorios predeterminados, por lo tanto, podemos usar nuestro Administrador de paquetes favorito para instalarlo. Si estamos usando Fedora, por ejemplo, podemos ejecutar:



Diálogo de instalación de $ sudo DNF

En Debian podemos ejecutar:

Diálogo de instalación de $ sudo apt-get

El diálogo La utilidad también está contenida en el repositorio de Core de Archlinux, por lo que podemos instalarla a través de Pacman:

Diálogo $ sudo Pacman -S

La instalación de comandos se aplica también a las derivadas de las distribuciones mencionadas anteriormente.

Opciones de diálogo comunes

Llamamos a estas opciones "comunes" porque se pueden usar independientemente del tipo de widget que queremos usar. Aquí solo veremos algunos de ellos, los que pueden ser de interés inmediato cuando comencemos a usar diálogo.

Configuración de un cuadro de widget Título: La opción -tita

Mediante el uso del --título Opción Podemos especificar una cadena que se utilizará como el título del widget; se mostrará en la parte superior de la caja. Aquí hay un ejemplo:

$ Diálogo -Título "Título del cuadro de diálogo" - -InputBox "Ingrese su nombre:" 0 0 0

Esto es lo que se muestra como el resultado del comando anterior:





Combinación de widgets: la opción -and -widget:

El --y widget opción, se puede usar para "encadenar" más widgets, de modo que después de usar el primero, se nos solicite inmediatamente con el segundo. La cadena se detiene cuando uno de los diálogos devuelve un estado de existencia no cero. Un ejemplo de su uso es:

$ diálogo \--InputBox "Ingrese su nombre:" 0 0 \-y widget--InputBox "Ingrese su edad:" 0 0 0

Una vez que lanzamos el comando anterior, se mostrará el primer widget de entrada utilizado para solicitarnos para nuestro nombre. Una vez que confirmamos la entrada haciendo clic en el DE ACUERDO botón, se mostrará el próximo widget, y se nos pedirá que ingresemos nuestra edad.

Borrar la pantalla con la opción -Clare

Cuando usamos el --y widget opción El contenido creado por un widget anulaciones que produce la anterior. Si los widgets no ocupan exactamente el mismo espacio de pantalla, los dos contenidos se mezclarían, y esto crearía un desastre.

Para evitar el contenido superpuesto, podemos usar el --claro opción; Cuando lo hacemos, el contenido de un widget se borra antes de que se muestre el próximo widget: solo se conserva el color de fondo.

Configuración del botón A como se resalta de forma predeterminada: la opción -default -button

Dependiendo del widget que estamos utilizando, se puede mostrar más de un botón en la pantalla y, de manera predeterminada.

Podemos anular el
widget predeterminado mediante el uso del --botón predeterminado opción seguida del nombre del botón, una entre OK, , Cancelar, No, ayuda o extra.



Esta opción puede ser realmente útil, por ejemplo, al solicitar la confirmación antes de ejecutar una potencialmente
acción peligrosa:

$ diálogo --default-button "no"--inputbox "Ingrese su nombre:" 0 0 0


Como puede ver en la captura de pantalla, lo hicimos para que el botón "No" se seleccione de forma predeterminada, de modo que el usuario seleccione explícitamente "Sí" para confirmar su elección.

Configuración del elemento seleccionado predeterminado en una lista con -Default -Item

Cuando usamos una lista de verificación o un widget de menú, el primer elemento en la lista de las opciones posibles se selecciona de forma predeterminada. Mediante el uso del --ítem predeterminado opción y referencia a un elemento, podemos usarlo como un valor predeterminado alternativo:

$ diálogo --default-Item 2 --CheckList "Seleccionar:" 0 0 5 \ 1 "Primer elemento" Off \ 2 "Segundo elemento" OFF \ 3 "Tercer elemento" OFF




Como puede ver, en el ejemplo anterior, referimos al elemento por su etiqueta, 2 En este caso (nos expandiremos más adelante).

Especificar un retraso de tiempo después de la confirmación: la opción -sleep

A veces es posible que deseemos que nuestra aplicación espere un cierto número de segundos después de procesar un cuadro de diálogo. Para alcanzar este comportamiento podemos usar el --dormir opción y proporcionar el número de segundos para esperar como un valor:

$ diálogo - -sleep 3 --box de entrada "Ingrese su nombre:" 0 0 0

Como resultado del comando anterior, después del caja de entrada se muestra el widget y el usuario presiona el INGRESAR llave, 3 Se esperan segundos antes de que se realice el siguiente comando en el script llamado.

Proporcionar un tiempo de espera de elección

En algunos casos, es posible que deseemos darle al usuario un número máximo de segundos para realizar su elección. La aplicación de diálogo proporciona el --se acabó el tiempo opción para obtener dicho comportamiento. El número de segundos de tiempo de espera debe aprobarse como el argumento de la opción. Si después de la cantidad especificada de segundos siempre que el usuario no realice su elección, la aplicación saldrá con un estado de error:

$ diálogo -Tiempo de tiempo 3 --Box -Input "Ingrese su nombre:" 0 0

Configuración de etiquetas alternativas para botones

El diálogo La utilidad proporciona una serie de opciones para anular la etiqueta predeterminada para los botones: podemos usar el --etiqueta de salida, --extra etiquetado, --etiqueta de ayuda, --sin etiqueta, --etiqueta ok, --símbolo Para cambiar las etiquetas de la "salida", "extra", "ayuda", "no", "ok" y "sí" botones, respectivamente.

Cada una de las opciones antes mencionadas toma una cadena como argumento, que se usa como etiqueta de botón. Aquí hay un ejemplo del uso de la opción:

$ diálogo --default-botton "no" \-no-label "yo no" \--yes-label "i do" \--yesno "¿Realmente quieres formatear la partición?"0 0

El comando anterior producirá el siguiente resultado:





Widgets de diálogo

Hasta ahora vimos algunos de los más útiles diálogo Opciones "comunes". Ahora veremos cómo usar algunos de los widgets disponibles en detalles. Antes de continuar, debemos especificar la sintaxis general. Cuando lanzamos un diálogo, siempre debemos proporcionar tres parámetros:

  1. El texto que se mostrará en el widget;
  2. El ancho del widget;
  3. La altura del widget;

Si proporcionamos un valor de 0 Para ancho o altura, el valor del atributo correspondiente se establece automáticamente.

El widget de la caja de entrada

El widget de InputBox se utiliza para solicitar al usuario que responda a una pregunta con una entrada textual. El parámetro de texto se usa para proporcionar la pregunta: si la cadena es más larga que el cuadro de diálogo, este último se volverá desplazable. Para usar este widget invocamos el diálogo con el --caja de entrada opción:



En la salida, la entrada proporcionada por el usuario se muestra en la salida de diálogo, que de manera predeterminada es stderr.

El widget de la lista de verificación

Ya vimos cómo se ve el widget de la lista de verificación en ejemplos anteriores: en este tipo de widget se proporciona una serie de opciones al usuario que puede seleccionar uno o más de ellos. Para usar este widget debemos usar el --Lista de Verificación opción y, además de los tres parámetros estándar que deben pasar a todos los widgets, debemos proporcionar también el altura de la lista y las opciones que se mostrarán.



El altura de la línea El parámetro se usa para establecer cuántas líneas se deben mostrar a la vez: si los números de líneas son menores que las opciones disponibles, el menú se volverá desplazable. Si proporcionamos 0 como el valor de altura de la línea El número de líneas corresponderá al número de opciones.

Para cada opción debemos proporcionar un identificador (etiqueta), un nombre y un estado que puede ser apagado o en. Si el estado es en la elección se verificará de forma predeterminada. Una vez que confirmemos nuestras opciones, las etiquetas relacionadas con la entrada que verificamos se mostrarán en stderr:

$ diálogo -checklist "Seleccionar elementos:" 0 0 0 \ 1 "Choice número uno" OFF \ 2 "Número de elección dos" en \ 3 "Número de elección Número tres" Off \ 4 "Número de elección" en

Con el comando anterior, lanzamos el menú con 4 opciones, y establecemos las opciones 2 y 4 verificadas de forma predeterminada. La salida del comando es la siguiente:



El widget radiolista

El widget radiolista se lanza cuando el diálogo se invoca con el --radiolista opción. Funciona de manera similar al widget de la lista de verificación, con la diferencia de que las elecciones son mutuamente excluyentes, por lo que solo se puede seleccionar un elemento. Así es como usamos el widget:

$ diálogo - -radiolist "seleccione elementos:" 0 0 0 \ 1 "Choice número uno" Off \ 2 "Número de elección dos" en \ 3 "Número de elección Número tres" Off \ 4 "Número de elección" Desactivado "


Dado que las opciones son mutuamente excluyentes, solo la primera opción establecida en En se seleccionará como un valor predeterminado.



Pídale al usuario una contraseña utilizando el widget de contraseña

El widget de contraseña se utiliza para permitir que un usuario ingrese una contraseña. Por razones de seguridad, el texto ingresado por el usuario no se muestra. Este comportamiento puede modificarse utilizando el --inseguro Opción: si lo hacemos, el widget mostrará un asterisco para cada letra de la contraseña ingresada en el campo correspondiente.

Usamos el widget iniciando el diálogo con el --contraseña opción:

$ diálogo --insecure - -passwordbox "Ingrese su contraseña:" 0 0 0

La salida del comando anterior es:



Mostrar un mensaje con el widget de msgbox

El uso de este widget es realmente simple: se invoca llamando al diálogo con el --msgbox opción y muestra un mensaje que es el contenido del texto parámetro. Un solo DE ACUERDO se muestra el botón:

$ diálogo -msgbox "Este es un mensaje muy importante que debe leerse cuidadosamente!"0 0




El widget del calendario

Podemos usar el widget del calendario invocando la utilidad de diálogo con el --calendario opción. El widget nos permitió seleccionar una fecha eligiendo mes, día y año que se muestren en secciones separadas del widget. Es posible proporcionar una fecha predeterminada pasándola como parte del comando.

Para comenzar el widget con el "quinto día de mayo del año 2020" como la fecha predeterminada, por ejemplo, ejecutaríamos el siguiente comando:

$ diálogo --calendar "Seleccione una fecha:" 0 0 27 05 2020

Producirá la siguiente salida:






Podemos movernos entre las secciones de widget utilizando el PESTAÑA clave y cambiar parámetros utilizando las teclas de flecha. Una vez que confirmamos la selección, se muestra a stderr en el día/mes/año del formato; Esto se puede modificar utilizando el --formato de fecha opción con un formato compatible con Strftime especificado como argumento. Para realizar la salida en el formato año/mes/día, por ejemplo, ejecutaríamos:

$ diálogo-Formato de fechas%y/%m/%d --calendar "Seleccione una fecha" 0 0 27 05 2020

Solicitar al usuario la confirmación: el widget YESNO

Ya encontramos este widget: nos permitió solicitar al usuario la confirmación. Al usarlo, especificamos la pregunta que se debe hacer a través del texto parámetro. Dependiendo de la elección del usuario, se devuelve un estado de salida: 0 Si el usuario confirma haciendo clic en el botón, 1 de lo contrario.

Para invocar este widget debemos usar el --sí No opción:

$ diálogo -yesno "¿confirma?"0 0

Aquí está el widget:



Gestión de la salida producida por un widget

Por defecto, la salida producida por un widget se muestra en Stderr, por lo que, por ejemplo, para almacenar los datos obtenidos de un widget a un archivo, todo lo que tenemos que hacer es redirigir es redirigir es redirigir es redirigir stderr a dicho archivo (si no está familiarizado con las redirecciones, es posible que desee echar un vistazo a la introducción al tutorial de redirecciones de shell bash):

$ diálogo -checklist "Seleccionar elementos:" 0 0 0 \ 1 "Choice número uno" OFF \ 2 "Número de elección Número dos" en \ 3 "Número de elección Número tres" OFF \ 4 "Número de elección" en 2> Elección.TXT

Una vez que el usuario confirme sus opciones, se escribirán, separados en el espacio en el elección.TXT archivo.

¿Qué pasa si queremos almacenar la selección directamente en una variable?? Para lograr la tarea debemos usar el --stdout opción, de modo que la salida del widget se muestra en stdin en lugar de stderr:

$ opciones = "$ (diálogo - -stdout --checklist" Seleccione elementos: "0 0 0 \ 1" Choice número uno "OFF \ 2" Número de elección "en \ 3" Número de elección Tres "OFF \ 4" Número de elección cuatro "On)"


En el ejemplo anterior, el resultado del procesamiento del widgets será accesible a través del opción variable. Quizás podamos querer pasar sobre ellos:

$ para elección en $ opciones; hacer echo "$ elección"; hecho 2 4

Para administrar el proceso de la sí No widget debemos comportarse de manera diferente. Dicho widget, como ya vimos, no produce ninguna salida, pero cambia el código de salida del comando utilizado para desaprobarlo en consecuencia a la elección del usuario. Si el usuario confirma y responde afirmativamente a la pregunta, el código de salida se establece en 0, de lo contrario a 1 (Esto puede parecer extraño, pero recuerda que 0 medio DE ACUERDO mientras 1 es un estado de salida que significa que un comando no fue exitoso). Sabiendo esto podemos escribir algo como:

Si diálogo-yesno "¿Desea abrir una instancia de gnome-terminal? ?"0 0; luego claro FI terminal de gnomo 

Conclusiones

En este tutorial vimos cómo podemos usar el diálogo Aplicación para usar ncurses widget in shell scripts. Primero vimos algunas opciones comunes que se pueden usar independientemente del tipo de widget, luego echamos un vistazo a algunos widgets específicamente. Hay muchos más widgets que se pueden usar con diálogo: Para una lista completa, le sugiero que eche un vistazo al manual de la aplicación.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cómo integrar cuadros de diálogo en scripts de shell con whiptail
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Comenzando con Tkinter para el tutorial de Python
  • Bucles anidados en guiones Bash
  • Cosas para instalar en Ubuntu 22.04
  • Comandos de Linux: los 20 comandos más importantes que necesitas ..
  • Cosas que hacer después de instalar Ubuntu 22.04 Jellyfish de Jammy ..
  • Comandos básicos de Linux
  • Instale Arch Linux en VMware Workstation