Hinzufügen einer einfachen GUI zu Linux-Shell-Skripten mit kdialog

Shell-Skripte sind unglaublich nützliche Dinge. Sie erlauben Ihnen, etwas so grundlegendes zu tun, wie einen einfachen Befehl zu erstellen, um einen schwierigeren Befehl mit vielen Flags zu ersetzen, oder viele komplexe Befehle von einem Cron-Job aus auszuführen. Sie sind großartig, weil Sie sie schnell in Ihrem bevorzugten Terminal abfeuern können, aber in einigen Fällen müssen Sie sich bestimmte Kombinationen von Flaggen oder Optionen merken. Wenn Sie sich in dieser Situation befinden, können Sie einige einfache GUI-Dialoge hinzufügen, um den Weg durch die vorliegende Aufgabe zu beschleunigen.

Um dieses Tutorial zu nutzen, benötigen Sie Folgendes:

  • Zugriff auf eine Unix-ähnliche Shell (dies wurde mit Blick auf die bash geschrieben).
  • macOS und *nix OS (wie Linux) sollten mit diesem oder einem ähnlichen System geliefert werden.
  • Unter Windows können Sie die CygWin-Umgebung installieren oder unter den neuesten Versionen von Windows 10 das „Windows-Subsystem für Linux“ verwenden.
  • Die Basisbibliotheken für die KDE-Desktop-Umgebung. Sie brauchen nicht das ganze Ding, insbesondere wenn Sie bereits ein anderes DE installiert haben.

Die Installation von kdialog sollte nur dann notwendig sein, wenn Sie mit einer anderen Desktop-Umgebung als KDE begonnen haben und Sie keine anderen KDE-Anwendungen auf Ihrem Rechner haben. Es ist ein Teil des Pakets kde-baseapps-bin unter Ubuntu, was bedeutet, dass es unter Kubuntu standardmäßig installiert ist. Bei anderen Derivaten können Sie es mit dem folgenden Befehl am Terminal installieren:

Installieren von kdialog vom Terminal aus.

sudo apt-get install kde-baseapps-bin

Dies wird wahrscheinlich zu einer umfangreichen Installation führen, da andere KDE-Bibliotheken und -Pakete mit installiert werden. Aber hey, Festplattenspeicher ist doch billig, oder?

Da Skripte (im Allgemeinen) Dinge automatisch tun sollen, brauchen wir diesen Dialog nur in den folgenden Situationen zu zeigen:

  • Wenn wir irgendeine Art von Input vom Benutzer erfassen müssen, oder;
  • Wenn wir dem Benutzer eine Art Rückmeldung in einer wahrnehmbaren Art und Weise zeigen wollen (d.h. nicht nur irgendein Text, der in der Kommandozeile ausgespuckt wird).

Nehmen wir das Beispiel der Verwendung eines Befehls zur [Sicherung Ihrer Drupal-Site mit Drush]. Da Sie ein angehender Internet-Unternehmer sind, haben Sie natürlich nicht nur eine Drupal-Site, sondern gleich drei. Sie möchten lieber keine separaten Befehle ausführen müssen, wenn Sie alle Ihre Sites sichern wollen, aber gleichzeitig möchten Sie sich keinen langen Weg merken müssen, wenn Sie nur einen einzigen Schnappschuss machen wollen. Wir können einige Dialoge nutzen, um uns selbst zu helfen:

  • Dem Benutzer eine Liste von Websites vorlegen, die wir sichern können, und als sie eine Auswahl treffen können, und;
  • Zeigen Sie dem Benutzer eine Nachricht, die das Ergebnis bestätigt, unabhängig davon, ob es ein Erfolg oder Misserfolg ist.

kDialog funktioniert, indem es in der Befehlszeile zusammen mit einem Dialogtyp, allen Parametern, die dieser Typ erfordert, und allen anderen Optionen wie einem Dialogtitel aufgerufen wird.

Es gibt eine Vielzahl von Dialogarten, aus denen Sie je nach Ihren Bedürfnissen wählen können:

kDialog-Typen
Dialog-TypBeispiel-BildBeschreibung
Informations-MessageboxenZeigt ein Feld mit einer Schaltfläche „OK“ zum Schließen an, das eine Textmeldung und entweder eine „unkritische“ Information, eine Warnung oder ein Fehlersymbol enthält.
Passives Pop-upEs wird eine Meldung angezeigt, die innerhalb weniger Sekunden verschwindet, d.h. es ist nicht erforderlich, dass der Benutzer sie schließt oder ablehnt.
Ja/Nein-NachrichtenboxWie die „Informationsmeldungsboxen“ zeigt dies einen Dialog mit einem Informations-/Warn-/Fehlersymbol an, das dem Benutzer auch die Auswahl von „Ja“ oder „Nein“ ermöglicht.
Eingabe-DialogfelderDies bietet ein einziges Feld, in das der Benutzer etwas Text eingeben kann.
Datei-AnzeigeboxenDadurch wird der Inhalt einer (reinen Text-)Datei in einem Dialogfeld angezeigt.
Menü- und AuswahldialogfelderDies bietet einen Dialog mit einer Liste von Elementen, die es dem Benutzer ermöglicht, eine oder mehrere Auswahlen zu treffen:

  • Die Dialoge Menü und Radioliste ermöglichen die Auswahl einer Option.
  • Der Checklisten-Dialog ermöglicht die Auswahl einer, mehrerer oder aller Optionen.
  • Der Combobox-Dialog ermöglicht die Auswahl einer Option über ein Drop-Down-Menü.
Dialogfelder zur DateiauswahlDer Benutzer kann einen Teil des Dateisystems auswählen, darunter auch

  • Auswahl vorhandener Dateien mit der Möglichkeit, nach Namen oder Dateityp zu filtern
  • Geben Sie eine neue oder eine neue zu speichernde bzw. zu aktualisierende Datei ein
  • Verzeichnisse
Fortschritts-DialogeDer Benutzer kann kDialog mit dem dcop-Befehl kombinieren, um einen Dialog zu erstellen, der den Benutzer über den Fortschritt einer Operation informiert.

Betrachtet man die oben genannten Optionen, so springen zwei von ihnen als potenziell geeignet heraus:

  • Der „Checklisten-Dialog“ wird es uns ermöglichen, eine oder alle unsere Websites zur Sicherung auszuwählen.
  • In der „Information Message Box“ kann angezeigt werden, ob dies jeweils gelungen oder misslungen ist.

Angesichts dieser Optionen können wir uns vorstellen, dass unser Skript in etwa so aussieht:

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.

In diesem Sinne sollten wir gleich einsteigen.

Als erstes sollten wir das Drush-Kommando zusammenstellen, das wir auf jeden Standort anwenden wollen, wenn er ausgewählt wird. Angenommen, alle Sites befinden sich auf demselben Web-Host in verschiedenen Verzeichnissen, aber wir wollen die Backups in einem gemeinsamen „Backup“-Verzeichnis speichern. Wir können Folgendes verwenden:

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

Mit Ihrem Wissen über das Setzen von Variablen und für Schleifen können wir dieses Skript wie folgt erstellen:

#! /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

Wenn wir dies speichern und es so machen, wie im ersten Artikel der Bash-Serie beschrieben, können wir einen einzigen Befehl ausführen, einen einfach zu bedienenden Dialog zur Auswahl unserer Website erhalten und dann ein schönes Fenster sehen, das über den Verlauf der Dinge berichtet.

Obwohl dieses Skript sicherlich auf verschiedene Weise optimiert werden kann, zeigt es, wie Sie kdialog verwenden können, um einige Benutzereingaben zu sammeln und einige Ergebnisse anzuzeigen, indem Sie ein einzelnes Programm innerhalb Ihres Skripts ausführen.

Das könnte Dich auch interessieren …