GNU/Linux >> Tutoriales Linux >  >> Linux

Agregar una GUI simple a los scripts de shell de Linux con kdialog

Los scripts de shell son cosas increíblemente útiles. Le permiten hacer algo tan básico como crear un comando fácil para reemplazar uno más difícil con muchas banderas, hasta agrupar muchos comandos complejos para ejecutarlos desde un trabajo cron. Son geniales porque puedes dispararlos rápidamente en tu terminal favorito, pero en algunos casos requieren que recuerdes combinaciones específicas de banderas u opciones. Si se encuentra en esta situación, puede agregar algunos cuadros de diálogo GUI simples para ayudarlo a acelerar su camino a través de la tarea en cuestión.

Para hacer uso de este tutorial, necesitará lo siguiente:

  • Acceso a un shell similar a Unix (esto está escrito pensando en bash).

  • Los sistemas operativos macOS y *nix (como Linux) deberían venir con este o uno similar.

  • En Windows, puede instalar el entorno CygWin o, en versiones recientes de Windows 10, usar el "Subsistema de Windows para Linux"

  • Las bibliotecas base para el entorno de escritorio KDE. No necesita todo, especialmente si ya tiene otro DE instalado.

La instalación de kdialog solo debería ser necesaria si comenzó con un entorno de escritorio otro que KDE, y no tiene otras aplicaciones de KDE en su máquina. Es parte del paquete kde-baseapps-bin en Ubuntu, lo que significa que está instalado por defecto en Kubuntu. En otros derivados, puede instalarlo con el siguiente comando en la terminal:

Instalando kdialog desde la terminal.

sudo apt-get install kde-baseapps-bin

Es probable que esto resulte en una instalación considerable, ya que se instalarán otras bibliotecas y paquetes de KDE junto con él. Pero oye, el espacio en el disco duro es barato, ¿verdad?

Dado que se supone que los scripts (en general) hacen las cosas automáticamente, solo necesitaremos mostrar este cuadro de diálogo en las siguientes situaciones:

  • Si necesitamos capturar algún tipo de entrada del usuario, o;

  • Si queremos mostrarle al usuario algún tipo de retroalimentación de una manera notoria (es decir, no solo un texto escupido en la línea de comandos).

Tomemos el ejemplo de usar un comando para [hacer una copia de seguridad de su sitio Drupal usando drush]. Por supuesto, dado que eres un emprendedor de Internet en ciernes, ¿no tienes solo un sitio de Drupal? tienes tres Preferiría no tener que ejecutar comandos separados cuando desee hacer una copia de seguridad de todos sus sitios, pero al mismo tiempo no querrá tener que recordar una ruta larga si desea tomar una instantánea de solo uno. Podemos usar un par de diálogos para ayudarnos:

  • Presentar al usuario una lista de sitios de los que podemos hacer una copia de seguridad y pedirle que elija, y;

  • Muestre al usuario un mensaje que confirme el resultado, ya sea un éxito o un fracaso.

kDialog funciona llamándolo en la línea de comando junto con un tipo de diálogo , cualquier parámetro que pueda requerir ese tipo y cualquier otra opción, como un título de diálogo.

Hay una buena variedad de tipos de diálogo para elegir según sus necesidades, como sigue:

Mirando las opciones anteriores, dos de ellas saltan por tener potencial:

  • El "Diálogo de lista de verificación" nos permitirá seleccionar uno o todos nuestros sitios para realizar una copia de seguridad.

  • El "Cuadro de mensaje de información" se puede usar para mostrar si cada uno de estos ha tenido éxito o no.

Dadas estas opciones, podemos imaginar que nuestro script se vea así:

SITE1 is located HERE (make these full paths, not relative paths)
SITE2 is located THERE
SITE3 is located IN ANOTHER PLACE

display a kDialog with SITE1, SITE2, and SITE3 as options
    and tell me which one(s) the user picks

for each one the user picked:
    run +drush ard+ on that site, and
    record whether it was successful or not.

display another +kDialog+ with each of those results.

Con eso en mente, profundicemos.

Lo primero que debemos hacer es ensamblar el comando drush que queremos aplicar a cada sitio cuando se seleccione. Supongamos que todos los sitios están en el mismo servidor web en diferentes directorios, pero queremos almacenar las copias de seguridad en un directorio de "copia de seguridad" común. Podemos usar lo siguiente:

cd SITE
drush ard --destination=/home/user/backup/SITENAME.tar.gz

Entonces, utilizando su conocimiento sobre la configuración de variables y bucles for, podemos hacer este script de la siguiente manera:

#! /bin/bash

// Note: create variables to hold paths to all the sites
PERSONALSITE='/home/www/mypersonalsite/'
BUSINESSSITE='/home/www/mybusinesssite/'
HOBBYSITE='/home/www/myhobbysite/'

// Note: create variable to hold path to the destination
DESTINATION='/home/user/backup'

// Note: display a dialog asking the user to select which sites to back-up
CHOICES=$(kdialog --checklist "Select sites to back-up:" 1 "Personal site" off 2 "Business Site" off 3 "Hobby site" off)

// Note: log a success/failure message for each of the choices returned from dialog
for each in $CHOICES
do
    case {
        1)
            cd $PERSONALSITE
            drush ard --destination=$DESTINATION/mypersonalsite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Personal site backup: Succeeded\n"
            else
                RESULTS += "Personal site backup: Failed\n"
            fi
        2)
            cd $BUSINESSSITE
            drush ard --destination=$DESTINATION/mybusinesssite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Business site backup: Succeeded\n"
            else
                RESULTS += "Business site backup: Failed\n"
            fi
        3)
            cd $HOBBYSITE
            drush ard --destination=$DESTINATION/myhobbysite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Hobby site backup: Succeeded\n"
            else
                RESULTS += "Hobby site backup: Failed\n"
            fi
    esac

// NOTE: display a dialog with the results of all the backup operations.
kdialog --msgbox $RESULTS

Si guardamos esto y hacemos que podamos ejecutarlo como se describe en el primer artículo de la serie Bash, podremos ejecutar un solo comando, obtener un cuadro de diálogo fácil de usar para elegir nuestro sitio, luego ver una ventana agradable que informa atrás cómo fue todo.

Si bien esta secuencia de comandos ciertamente se puede optimizar de varias maneras, demuestra cómo puede usar kdialog para recopilar algunas entradas del usuario y mostrar algunos resultados ejecutando un solo programa dentro de su secuencia de comandos.


Linux
  1. Los comandos de Linux más simples con 10 ejemplos

  2. Parámetros especiales de Bash explicados con 4 scripts de Shell de ejemplo

  3. Parámetros posicionales de Bash explicados con 2 scripts de shell de ejemplo

  4. ¿Cómo puedo hacer una división con variables en un shell de Linux?

  5. ¿Por qué ejecutar un comando de shell de Linux con '&'?

Cómo crear cuadros de diálogo GUI en Bash Scripts con Zenity en Linux y Unix

Cómo crear cuadros de diálogo GUI en Bash Scripts con Whiptail en Linux

Shell Scripting para principiantes:cómo escribir Bash Scripts en Linux

Maneras simples de generar una contraseña aleatoria en Linux Shell

50 comandos de corte de Linux simples y útiles en Unix con ejemplos

Agregar nuevos usuarios en Linux con el comando Useradd

    kTipos de diálogo
    Tipo de diálogo Imagen de muestra Descripción

    Cuadros de mensajes de información

    Muestra un cuadro con un botón "Aceptar" para cerrar, que proporciona un mensaje de texto y un icono de información, advertencia o error "no críticos".

    Ventana emergente pasiva

    Esto muestra un mensaje que desaparecerá en unos segundos, es decir, no requiere que el usuario lo cierre o lo descarte.

    Cuadro de mensaje Sí/No

    Al igual que los "Cuadros de mensajes de información", esto muestra un cuadro de diálogo con un icono de información/advertencia/error que también proporcionará al usuario la selección de "Sí" o "No".

    Cuadros de diálogo de entrada

    Esto proporciona un cuadro único en el que el usuario puede escribir algún texto.

    Cuadros de visualización de archivos

    Esto mostrará el contenido de un archivo (texto sin formato) dentro de un cuadro de diálogo.

    Cuadros de diálogo de menú y selección

    Esto proporciona un cuadro de diálogo con una lista de elementos, lo que permite al usuario realizar una o más selecciones:

    • Los diálogos Menú y Lista de radio permiten la selección de una opción.

    • El cuadro de diálogo Lista de verificación permite la selección de una, varias o todas las opciones.

    • El cuadro de diálogo Combobox permite la selección de una opción mediante un menú desplegable.

    Cuadros de diálogo de selección de archivos

    El usuario puede seleccionar parte del sistema de archivos, incluyendo:

    • Seleccione archivos existentes, con la capacidad de filtrar por nombre o tipo de archivo

    • Ingrese una nueva de un nuevo archivo para guardar/actualizar

    • Directorios

    Diálogos de progreso

    El usuario puede combinar kDialog con el comando dcop para crear un cuadro de diálogo que actualice al usuario sobre el progreso de una operación.