Wenn es um Bash-Skripte geht, konzentrieren sich alle Skripte hauptsächlich auf die Befehlszeilenoperation. Ob Sie Eingaben vom Benutzer benötigen oder einige Nachrichten anzeigen, alles wird über das Terminal erledigt. Die meisten Leute, die Skripte mit Bash schreiben, haben keine Ahnung, dass es eine Reihe von GUI-Tools gibt. In diesem Artikel werden wir uns mit einem solchen Tool namens Zenity befassen - ein einfaches Programm, mit dem Sie grafische (GTK+) Dialogfelder in Befehlszeilen- und Shell-Skripten erstellen können.
Was ist Zenity?
Zenity ist eine Neufassung von gdialog, der GNOME-Portierung von Dialog, mit der Sie eine Reihe von Widgets für verschiedene Vorgänge erstellen können, bei denen Benutzer grafisch mit dem Skript interagieren können. Die Widgets basieren auf dem GTK-Toolkit.
Zenity ist ein Open-Source-Programm, das mit C geschrieben wurde Programmiersprache. Es unterstützt Linux, BSD und Windows.
Lassen Sie uns ohne weiteres Umschweife sehen, wie grafische GTK+-Dialogfelder von der Befehlszeile und von Shell-Skripten mit Zenity angezeigt werden.
So installieren Sie Zenity unter Linux
Überprüfen Sie zunächst, ob Zenity installiert und verfügbar ist, indem Sie die folgenden Befehle ausführen:
$ which zenity /usr/bin/zenity
$ zenity --version 3.32.0
$ zenity --about
Wenn Zenity nicht in Ihrer Distribution installiert ist, führen Sie je nach Distribution die folgenden Befehle aus, um es zu installieren.
Alpines Linux:
$ sudo apk add zenity
Arch-Linux:
$ sudo pacman -S zenity
Fedora, RHEL, CentOS, Alma Linux und Rocky Linux:
$ sudo dnf install zenity
Debian, Ubuntu, Linux Mint, Pop-Betriebssystem:
$ sudo apt install zenity
openSUSE:
$ sudo zypper install zenity
1. Zenity-Hilfe und allgemeine Optionen
Für jedes Widget gibt es eine zugehörige Hilfeoption, über die Sie eine Reihe von unterstützten Optionen abrufen können.
Führen Sie den folgenden Befehl aus, um auf den Hilfebereich zuzugreifen.
$ zenity --help
Es gibt einige allgemeine Optionen, die zusammen mit jedem Widget verwendet werden können. Dies sind keine obligatorischen Optionen, aber wenn sie verwendet werden, können Sie das Widget-Verhalten ändern.
Führen Sie den folgenden Befehl aus, um die Liste der allgemeinen Optionen abzurufen.
$ zenity --help-general
Wir werden sehen, wie diese Optionen in den nächsten Abschnitten funktionieren.
2. Meldungsdialogfeld
Ein Meldungsdialogfeld zeigt ein Fehler-, Warn-, Info- und Fragedialogfeld an. Je nach Situation müssen Sie das entsprechende Dialogfeld im Skript verwenden.
2.1. Fehlerdialogfeld
Um auf die Liste der unterstützten Optionen für das Fehlerdialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:
$ zenity --help-error
Verwenden Sie den folgenden Befehl, um das Fehlerdialogfeld im Skript anzuzeigen. Hier der --error
flag erstellt das Fehlerdialogfeld und --text
flag druckt die Textnachricht. Sie können auf dem Bild sehen, dass dem Dialogfeld ein Fehlersymbol zugeordnet ist.
zenity --error \ --title "Error Message" \ --width 500 \ --height 100 \ --text "Permission denied. Run with sudo or as root user."
Sie können auch aus dem obigen Bild sehen, dass einige der allgemeinen Optionen wie --width, --height verwendet werden, um die Geometrie des Dialogfelds zu steuern. Das Flag --title wird verwendet, um die Dialogleiste mit dem Titel zu drucken.
2.2. Warndialogfeld
Um auf die Liste der unterstützten Optionen für das Warndialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:
$ zenity --help-warning
Verwenden Sie --warning
Flag im Skript, um das Warnfeld und --text
anzuzeigen Flag, um die Warnmeldung anzuzeigen.
zenity --warning \ --title "Warning Message" \ --width 500 \ --height 100 \ --text "Disk space exceeded the threshold limit. Check ASAP."
2.3. Info-Dialogfeld
Um auf die Liste der unterstützten Optionen für das Info-Dialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:
$ zenity --help-info
Verwenden Sie --info
Flag im Skript, um die Infobox und --text
anzuzeigen Flag, um die Info-Nachricht anzuzeigen.
zenity --info \ --title "Info Message" \ --width 500 \ --height 100 \ --text "Installation completed successfully."
2.4. Fragedialogfeld
Führen Sie den folgenden Befehl aus, um auf die Liste der unterstützten Optionen für das Fragedialogfeld zuzugreifen:
$ zenity --help-question
Das Fragedialogfeld zeigt eine Meldung zusammen mit einem Ja an oder Nein Möglichkeit. Wenn Sie "Ja" drücken , ist der Rückgabecode "Null" und für "Nein" der Rückgabecode ist "eins" . Sie müssen die Exit-Codes verwenden, um weitere Logik in Ihre Skripte zu schreiben.
zenity --info \ --title "Info Message" \ --width 500 \ --height 100 \ --text "Installation completed successfully."
3. Dialogfeld zur Texteingabe
Um auf die Liste der unterstützten Optionen für das Texteingabedialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:
$ zenity --help-entry
Das Texteingabedialogfeld fordert den Benutzer zur Eingabe auf. Das Flag --entry
zum Erstellen eines Eingabedialogs verwendet werden. Um Text im Dialogfeld anzuzeigen, verwenden Sie --text
Flagge. Der in das Textfeld eingegebene Wert wird im Terminal gedruckt, sobald Sie OK drücken. Sie müssen die Ausgabe in einer Variablen speichern, wenn Sie die Eingabe aus dem Textfeld weiterverarbeiten möchten, wie ich es unten getan habe.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name"); echo $USR
Wenn Sie den Eingabetext beim Tippen nicht sichtbar machen möchten, verwenden Sie den --hide-text
Flagge.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name" \ --hide-text); echo $USR
Sie können auch einen Standardwert innerhalb des Eingabefelds mit --entry-text
festlegen Flagge. Sie müssen den Wert entfernen und Ihre Eingabe machen oder der vorhandene Wert wird als Standard übernommen.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name" \ --entry-text $USER); echo $USR
4. Passwort-Dialogfeld
Führen Sie den folgenden Befehl aus, um auf die Liste der unterstützten Optionen für das Kennwortdialogfeld zuzugreifen:
$ zenity --help-password
Das Passwort-Dialogfeld akzeptiert Benutzername und Passwort mit --username
und --password
Flagge. Die Ausgabe wird als (Benutzername | Passwort) angezeigt. Sie müssen die Ausgabe des Befehls einer Variablen zuweisen und den Benutzernamen und das Passwort zur weiteren Verarbeitung extrahieren.
$ zenity --password --username
5. Dialogfeld „Textinformationen“
Um auf die Liste der unterstützten Optionen für das Textinformationsdialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:
$ zenity --help-text-info
Das Dialogfeld „Textinformationen“ druckt beliebigen Text aus einer Datei oder öffnet eine URL im Dialogfeld. Um beispielsweise eine Datei zu lesen und den Text anzuzeigen, verwenden Sie das Flag --filename
. Im folgenden Beispiel lese ich /etc/hosts
Datei.
zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts"
Das --checkbox
Flag kann verwendet werden, um Eingaben vom Benutzer zu erhalten. Ein gutes Beispiel wäre "Lizenzvereinbarung akzeptieren". Wenn Sie das Kontrollkästchen nicht aktivieren, ist die Schaltfläche „OK“ deaktiviert.
zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts" \
--checkbox "This is a checkbox"
6. Dialogfeld „Kalender“
Um auf die Liste der unterstützten Optionen für das Kalenderdialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:
$ zenity --help-calendar
Das Dialogfeld „Kalender“ zeigt einen Kalender an und ermöglicht Ihnen die Auswahl eines Datums. Sie müssen die Ausgabe in einer Variablen speichern, sonst wird das ausgewählte Datum im Terminal ausgegeben.
zenity --calendar \ --title="Select a Date" \ --text="Select Date to pull the employee record."
Standardmäßig ist das heutige Datum ausgewählt, aber wir können auch ein benutzerdefiniertes Datum auswählen, indem Sie --day
verwenden , --month
, und --year
Flaggen.
zenity --calendar \ --title="Select a Date" \ --text="Select Date to pull the employee record." \ --year 2015 \ --month 7 \ --day 15
Das Standardausgabeformat ist DD\MM\YY
. Es ist auch möglich, eine benutzerdefinierte Datumsausgabe mit dem --date-format
zu erstellen Flagge.
zenity --calendar \ --title="Select a Date" \ --text="Select Date to pull the employee record." \ --date-format %m-%d-%y
7. Dialogfeld zur Farbauswahl
Um auf die Liste der unterstützten Optionen für das Farbauswahldialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:
$ zenity --help-color-selection
Der Farbauswahldialog zeigt eine Palette an und erlaubt Ihnen, eine Farbe auszuwählen, und die Ausgabe ist ein RGB-Wert. Verwenden Sie --color-selection
zusammen mit --show-palette
kennzeichnen Flagge.
$ COLOR_RGB=$(zenity --color-selection --show-palette) $ echo $COLOR_RGB
8. Dialogfeld zur Dateiauswahl
Führen Sie den folgenden Befehl aus, um auf die Liste der unterstützten Optionen für das Dialogfeld zur Dateiauswahl zuzugreifen:
$ zenity --help-file-selection
Im Dateiauswahldialog können Sie Dateien oder Verzeichnisse auswählen und der Pfad wird als Ausgabe angezeigt. Das Flag --file-selection
sollte benutzt werden. Es gibt ein paar Flags, die im Dateiauswahldialog verwendet werden können.
--filename
=> Pfad zur Standarddatei/-verzeichnis--directory
=> Nur Verzeichnisse auswählen--multiple
=> Ermöglicht die Auswahl mehrerer Dateinamen--save
=> In den Sparmodus setzen
zenity --file-selection \ --title "Select Files" \ --filename "/home/${USER}/" \ --multiple
Bei Mehrfachauswahl wird der Dateipfad mit dem "|"
getrennt Symbol.
Es ist möglich, mit --separator
ein benutzerdefiniertes Trennzeichen festzulegen Flagge. Im folgenden Beispiel verwende ich Doppelpunkt (:
) als Trennzeichen.
zenity --file-selection \ --title "Select Files" \ --filename "/home/${USER}/" \ --multiple \ --separator :
9. Dialogfeld "Formulare"
Führen Sie den folgenden Befehl aus, um auf die Liste der unterstützten Optionen für das Formulardialogfeld zuzugreifen:
$ zenity --help-forms
Im Formulardialog können Sie Formulare erstellen. Ein gutes Beispiel ist das Registrierungsformular für neue Benutzer. Verwenden Sie --forms
Flag zum Erstellen eines Formulardialogfelds. Es gibt ein paar zusätzliche Flags, die zusammen mit den --forms
verwendet werden können Flagge.
--add-entry
=> Fügen Sie einen neuen Eintrag im Formulardialog hinzu, damit der Benutzer die Eingaben vornehmen kann.--text
=> Text, der im Dialogfeld angezeigt werden soll.--add-password
=> Akzeptiert das Passwort, zeigt den Wert aber nicht auf dem Bildschirm an.--calendar
=> Kalender öffnen und ein Datum daraus auswählen.
Unten sehen Sie ein einfaches Beispiel für ein Anmeldeformular für Benutzer, das den Formulardialog verwendet.
zenity --forms \ --text "Welcome to signup wizard" \ --add-entry "Enter the first name" \ --add-entry "Enter the last name" \ --add-entry "Enter login name" \ --add-password "Enter password"
Das Standardtrennzeichen für die Eingabewerte ist der "|"
Symbol. Sie können auch ein benutzerdefiniertes Trennzeichen mit --separator
verwenden Flagge.
10. Fortschrittsdialogfeld
Um auf die Liste der unterstützten Optionen für das Fortschrittsbalken-Dialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:
$ zenity --help-progress
Verwenden Sie --progress
Flag, um einen Fortschrittsbalken zu erstellen. Um einen Fortschrittsbalken zu erstellen, müssen Sie verstehen, wie er funktioniert. Von Ihrer Seite sollten zwei Eingaben bereitgestellt werden.
- Die Zeile, die nur die Zahl mit dem
echo
enthält Befehl wird als Prozentsatz des Fortschritts betrachtet. - Die Zeile, die mit dem
#
beginnt Symbol imecho
Befehl wird als Fortschrittsmeldung ausgegeben.
( echo 10 echo "# Updating repository Index" sleep 5 echo 15 echo "# Reading input files" sleep 5 echo 70 echo "# Installing packages..." sleep 5 echo 100 echo "# Package Installation completed!" ) | zenity --title "Package Installation Progress Bar" --progress --auto-close
Sobald der Fortschrittsbalken fertig ist, können Sie ein Dialogfeld so einstellen, dass es automatisch geschlossen wird, indem Sie das Flag --auto-close verwenden.
11. Listendialogfeld
Um auf die Liste der unterstützten Optionen für das Listendialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:
$ zenity --help-list
Im Listendialogfeld können Sie eine Liste mit Zeilen und Spalten erstellen. Verwenden Sie --list
Flag zum Erstellen einer Liste im Dialogfeld und --column
Flag zum Hinzufügen von Spalten.
$ zenity --list \ --column "Player" \ --column "Club" \ --column "Country" \ Messi PSG Argentina \ Neymar PSG Brazil \ Ronaldo Manu Portugal
Schauen Sie sich das obige Beispiel an. Verwenden der --column
flag, ich habe drei Spalten erstellt. Nachdem die Spalten erstellt wurden, können Sie den Wert in die nächsten Zeilen eingeben, der für jede Zeile angezeigt wird, wie ich es im obigen Bild getan habe.
In der ersten Spalte können Checkboxen oder Radiobuttons erstellt werden. Verwenden Sie zum Erstellen eines Optionsfelds --radiolist
Flag und um ein Kontrollkästchen zu erstellen, verwenden Sie --checklist
Flagge. Beim Erstellen einer Radioliste muss unbedingt TRUE hinzugefügt werden oder FALSCH keywords als ersten Wert für Ihre Zeile. True wählt die Radioliste oder das Kontrollkästchen aus, während false das Kontrollkästchen deaktiviert lässt.
zenity --list \ --checklist \ --column "checkbox" \ --column "Player" \ --column "Club" \ --column "Country" \ FALSE Messi PSG Argentina \ FALSE Neymar PSG Brazil \ FALSE Ronaldo Manu Portugal
Wenn Sie die Zeile auswählen und auf OK klicken, wird der Wert mit (|
an das Terminal ausgegeben ) als Trennzeichen. Standardmäßig wird nur die erste Spalte an das Terminal gedruckt. Um die gesamte Zeile zu drucken, übergeben Sie --print-column ALL
.
Schlussfolgerung
Wir sind am Ende des Artikels angelangt. Ich habe kurz erklärt, was Zenity ist und welche verschiedenen Widgets verwendet werden können. Möglicherweise benötigen Sie nicht ständig GUI-Dienstprogramme. Wenn Sie jedoch grafische GTK+-Widgets in Bash-Skripten benötigen, wird Zenity neben anderen GUI-Tools nützlich sein.