So verwenden Sie NCurses -Widgets in Shell -Skripten unter Linux
- 1172
- 149
- Hr. Moritz Bozsik
In diesem Tutorial lernen wir die Grundlagen der Dialogdienstprogramm, Um zu verwenden Ncurses
Widget in unseren Shell -Skripten. Wir werden sehen, wie der Dialog in den am häufigsten verwendeten Linux -Verteilungen installiert wird, einige der gängigen Optionen, mit denen wir das Verhalten des Dialogfelds ändern können, wie einige Widgets verwendet werden. unter den anderen: Eingabefeld
, Checkliste
, Radiolist
Und ja Nein
. Schließlich werden wir sehen, wie die von der Widget -Verarbeitung erhaltenen Daten verwendet werden.
In diesem Tutorial lernen Sie:
- So installieren Sie das Dialogdienstprogramm unter Linux
- Was sind die relevantesten Dialogoptionen
- So verwenden Sie die Inputbox, Checkliste, Radiolist, Kennwortbox, MSBox, Kalender und Yesno -Widgets
- So verwalten Daten aus der Widget -Verarbeitung abgeleitet
Softwareanforderungen und Konventionen verwendet
Kategorie | Anforderungen, Konventionen oder Softwareversion verwendet |
---|---|
System | Verteilungsunabhängige |
Software | Das Dialogdienstprogramm ist erforderlich, um diesem Tutorial zu folgen |
Andere | Vertrautheit mit der Befehlszeilenschnittstelle und der Shell -Umleitung |
Konventionen | # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können |
Installation unter Linux
Der Dialog
Das Dienstprogramm ist in allen wichtigen Linux -Distributions -Standard -Repositories erhältlich. Daher können wir unseren bevorzugten Paketmanager verwenden, um es zu installieren. Wenn wir zum Beispiel Fedora verwenden, können wir ausführen:
$ sudo dnf install Dialog installieren
Auf Debian können wir rennen:
$ sudo APT-Get Installation Dialog
Der Dialog
Das Dienstprogramm ist auch im Archlinux Core -Repository enthalten, sodass wir es über installieren können Pacman
:
$ sudo pacman -s Dialog
Die Installationsbefehle gilt auch für Derivate der oben genannten Verteilungen.
Gemeinsame Dialogoptionen
Wir nennen diese Optionen "gemeinsam", weil sie unabhängig von der Art von Widget verwendet werden können, die wir verwenden möchten. Hier werden wir nur einige von ihnen sehen, die möglicherweise von unmittelbarem Interesse sein, wenn wir anfangen zu benutzen Dialog
.
Einstellungen Ein Widget -Box -Titel: Die Option -title -Option
Durch Verwendung der --Titel
Option Wir können eine Zeichenfolge angeben, die als Widget -Titel verwendet wird. Es wird oben in der Box angezeigt. Hier ist ein Beispiel:
$ Dialog -Title "Dialog -Titel" -Inputbox "Geben Sie Ihren Namen ein:" 0 0
Hier ist das, was als Ergebnis des obigen Befehls angezeigt wird:
Kombinieren von Widgets: Die Option -und Widget -Option:
Der --und Widget
Option kann verwendet werden, um mehr Widgets zu „ketten“, sodass wir nach der Verwendung der ersten sofort mit der zweiten aufgefordert werden. Die Kette wird gestoppt, wenn einer der Dialoge einen Status ungleich Null zurückgibt. Ein Beispiel für die Verwendung ist:
$ Dialog \-Inputbox "Geben Sie Ihren Namen ein:" 0 0 \-und -Widget--Inputbox "Geben Sie Ihr Alter ein:" 0 0
Sobald wir den obigen Befehl gestartet haben, wird das erste Eingabe -Widget, mit dem wir für unseren Namen aufgefordert werden, angezeigt. Sobald wir die Eingabe bestätigen, indem wir auf die klicken OK
Taste, das nächste Widget wird angezeigt, und wir werden aufgefordert, unser Alter einzugeben.
Löschen des Bildschirms mit der Option -clear
Wenn wir das verwenden --und Widget
Option Der Inhalt, der von einem Widget erstellt wurde, das von der vorherigen erstellt wurde. Wenn die Widgets nicht genau den selben Bildschirmraum einnehmen, wären die beiden Inhalte gemischt, und dies würde ein Chaos schaffen.
Um sich überlappende Inhalte zu vermeiden, können wir die verwenden --klar
Möglichkeit; Wenn wir dies tun, wird der Inhalt eines Widgets gelöscht, bevor das nächste Widget angezeigt wird: Nur die Hintergrundfarbe bleibt erhalten.
Einstellen der A -Schaltfläche, die standardmäßig hervorgehoben wird: Die Option -default -Button -Option
Abhängig vom von uns verwendeten Widget kann mehr als eine Taste auf dem Bildschirm angezeigt werden, und standardmäßig wird eine davon standardmäßig hervorgehoben, wobei die Standardaktion festgelegt wird, wenn der Benutzer eingegeben wird.
Wir können das überschreiben
Widget Standard verwenden mit dem --Standard-Button
Option gefolgt vom Namen der Schaltfläche, einer unter OK
, Ja
, stornieren
, NEIN
, Hilfe
oder extra
.
Diese Option kann beispielsweise beispielsweise bei der Bestätigung vor der Ausführung eines potenziellen
gefährliche Handlung:
$ Dialog-Default-Button "no"---Inputbox "Geben Sie Ihren Namen ein:" 0 0
Wie Sie aus dem Screenshot sehen können, haben wir so erstellt, dass die Schaltfläche „Nein“ standardmäßig ausgewählt wird, damit der Benutzer explizit „Ja“ auswählen sollte, um seine Auswahl zu bestätigen.
Festlegen des Standardelements ausgewählter Element in einer Liste mit -Default -iTEM
Wenn wir eine Checkliste oder ein Menü -Widget verwenden, wird das erste Element in der Liste der möglichen Auswahlmöglichkeiten standardmäßig ausgewählt. Durch Verwendung der --Standard-Element
Option und Referenzierung auf ein Element können wir es als alternative Standardeinstellung verwenden:
$ Dialog-Default-Item 2-Checklist "Wählen Sie:" 0 0 5 \ 1 "Erstes Element" Aus \ 2 "zweites Element" aus \ 3 "drittes Element" aus
Wie Sie sehen können, haben wir im obigen Beispiel das Element durch sein Schild
, 2 In diesem Fall (wir werden später dies erweitern).
Angeben einer Zeitverzögerung nach Bestätigung: Die Option -schlafe Option
Manchmal möchten wir, dass unsere Bewerbung nach der Verarbeitung eines Dialogfelds auf eine bestimmte Anzahl von Sekunden wartet. Um dieses Verhalten zu erreichen, können wir die verwenden --schlafen
Option und geben Sie die Anzahl der Sekunden an, um als Wert zu warten:
$ Dialog -Sleep 3 -Inputbox "Geben Sie Ihren Namen ein:" 0 0
Als Ergebnis des obigen Befehls nach dem Eingabefeld
Widget wird angezeigt und der Benutzer trifft die EINGEBEN
Taste, 3
Sekunden werden gewartet, bevor der nächste Befehl im aufrufenden Skript durchgeführt wird.
Bereitstellung eines Auswahlausgleichs
In einigen Fällen möchten wir dem Benutzer möglicherweise eine maximale Anzahl von Sekunden geben, um seine Auswahl auszuführen. Die Dialoganwendung bietet die --Auszeit
Option, das Verhalten zu erhalten. Die Anzahl der Timeout -Sekunden muss als Argument der Option übergeben werden. Wenn der Benutzer nach der angegebenen Anzahl von Sekunden nicht seine Auswahl ausführt, wird die Anwendung mit einem Fehlerstatus beendet:
$ Dialog -Timeout 3 -Inputbox "Geben Sie Ihren Namen ein:" 0 0
Einstellen alternativer Etiketten für Schaltflächen
Der Dialog
Das Dienstprogramm bietet eine Reihe von Optionen, um die Standardbezeichnung für Schaltflächen zu überschreiben: Wir können die verwenden --Ausgangslabel
, --Extra-Label
, --Hilfslabel
, --No-Label
, --OK-Label
, --Ja-Label
Um die Beschriftungen der Schaltflächen „Exit“, „Extra“, „Hilfe“, „Nein“, „OK“ und „Ja“ zu ändern.
Jede der oben genannten Optionen nimmt eine Zeichenfolge als Argument an, die als Taste -Etikett verwendet wird. Hier ist ein Beispiel für die Optionsnutzung:
$ Dialog-Default-Button "no" \ --no-label "Ich nicht" \--yes-Label "Ich mache" \--yesno "Willst du die Partition wirklich formatieren?"0 0
Der obige Befehl erzeugt das folgende Ergebnis:
Dialogwidgets
Bis jetzt haben wir einige der nützlichsten gesehen Dialog
"Gemeinsame" Optionen. Jetzt werden wir sehen, wie einige der verfügbaren Widgets im Detail verwendet werden. Vor dem Fortfahren müssen wir die allgemeine Syntax angeben. Wenn wir einen Dialog starten, müssen wir immer drei Parameter bereitstellen:
- Der Text, der im Widget angezeigt wird;
- Die Widget -Breite;
- Die Widgethöhe;
Wenn wir einen Wert von bieten 0
Für die Breite oder Höhe wird der Wert des entsprechenden Attributs automatisch festgelegt.
Das Inputbox -Widget
Das inputBox -Widget wird verwendet, um den Benutzer aufzufordern, auf eine Frage mit einer Texteingabe zu antworten. Der Textparameter wird verwendet, um die Frage anzugeben: Wenn die Zeichenfolge länger ist als das Dialogfeld, wird letzteres scrollbar. Um dieses Widget zu verwenden, rufen wir mit dem Dialog auf --Eingabefeld
Möglichkeit:
Beim Beenden wird die vom Benutzer bereitgestellte Eingabe im Dialogausgabe angezeigt, was standardmäßig standardmäßig ist Stderr
.
Das Checklisten -Widget
Wir haben bereits gesehen, wie das Checklist -Widget in früheren Beispielen aussieht: In dieser Art von Widget wird dem Benutzer eine Reihe von Auswahlmöglichkeiten zur Verfügung gestellt, die einen oder mehrere davon auswählen kann. Um dieses Widget zu verwenden, müssen wir das verwenden --Checkliste
Option, und zusätzlich zu den Standard -drei Parametern, die an alle Widgets übergeben werden müssen, müssen wir auch die bereitstellen Listenhöhe
und die ausgestellten Auswahlmöglichkeiten.
Der Zeilenhöhe
Der Parameter wird verwendet, um festzustellen, wie viele Zeilen gleichzeitig angezeigt werden sollen: Wenn die Anzahl der Zeilen geringer ist als die verfügbaren Auswahlmöglichkeiten, wird das Menü scrollbar. Wenn wir zur Verfügung stellen 0
als Wert von Zeilenhöhe
Die Anzahl der Zeilen entspricht der Anzahl der Auswahlmöglichkeiten.
Für jede Wahl müssen wir eine Kennung (Tag), einen Namen und einen Status angeben, der sein kann aus
oder An
. Wenn der Status ist An
Die Wahl wird standardmäßig überprüft. Sobald wir unsere Entscheidungen bestätigen, werden die Tags, die sich auf den von uns überprüften Eintrag beziehen, angezeigt werden Stderr
:
$ Dialog -Checklist "Elemente auswählen:" 0 0 0 \ 1 "Auswahl Nummer eins" Aus \ 2 "Auswahl Nummer zwei" auf \ 3 "Auswahl Nummer drei" Aus \ 4 "Auswahl Nummer vier" auf
Mit dem obigen Befehl haben wir das Menü mit 4 Optionen gestartet und die Optionen 2 und 4 standardmäßig überprüft. Die Ausgabe des Befehls ist Folgendes:
Das radiolistische Widget
Das Radiolisten -Widget wird gestartet, wenn der Dialog mit dem aufgerufen wird --Radiolist
Möglichkeit. Es funktioniert ähnlich wie das Checklist -Widget, mit dem Unterschied, dass die Auswahl gegenseitig ausschließt, sodass nur ein Element ausgewählt werden kann. So verwenden wir das Widget:
$ Dialog -radiolist "Elemente auswählen:" 0 0 0 \ 1 "Auswahl Nummer eins" aus \ 2 "Auswahl Nummer zwei" auf \ 3 "Auswahl Nummer drei" Aus \ 4 "Auswahl Nummer vier" off "
Da sich die Auswahl gegenseitig ausschließt, wird nur die erste Option festgelegt An
wird als Standard ausgewählt.
Fragen Sie den Benutzer nach einem Passwort mit dem Widget der Passwordbox -Widget nach einem Kennwort
Mit dem Widget des Passwortbox -Widgets wird ein Benutzer aufgefordert, ein Kennwort einzugeben. Aus Sicherheitsgründen wird der vom Benutzer eingegebene Text nicht angezeigt. Dieses Verhalten kann durch die Verwendung der geändert werden --unsicher
Option: Wenn wir dies tun, zeigt das Widget ein Sternchen für jeden Buchstaben des im entsprechenden Feld eingegebenen Kennworts an.
Wir verwenden das Widget, indem wir Dialog mit dem starten --Passwortbox
Möglichkeit:
$ Dialog -INSECURE -PASSWORDBOX "Geben Sie Ihr Passwort ein:" 0 0
Die Ausgabe des obigen Befehls ist:
Anzeige einer Nachricht mit dem MSGBox -Widget
Die Verwendung dieses Widgets ist wirklich einfach: Es wird aufgerufen, indem Dialog mit dem aufgerufen wird --msgbox
Option und zeigt eine Nachricht an, die der Inhalt des ist Text
Parameter. Ein einzelner OK
Die Schaltfläche wird angezeigt:
$ Dialog -MSGBox "Dies ist eine sehr wichtige Nachricht, die sorgfältig gelesen werden sollte!"0 0
Das Kalender -Widget
Wir können das Kalender -Widget verwenden, indem wir das Dialogdienstprogramm mit dem aufrufen --Kalender
Möglichkeit. Das Widget lässt uns ein Datum auswählen, indem wir Monat, Tag und Jahr auswählen, die in separaten Abschnitten des Widgets angezeigt werden. Es ist möglich, ein Standarddatum anzugeben, indem Sie es als Teil des Befehls verabschiedet haben.
Um das Widget mit dem „fünften Tag des Jahres 2020“ als Standarddatum zu beginnen, würden wir den folgenden Befehl ausführen:
$ Dialog -Calendar "Wählen Sie ein Datum aus:" 0 0 27 05 2020
Es erzeugt die folgende Ausgabe:
Wir können uns zwischen den Widget -Abschnitten mit dem bewegen TAB
Taste und ändern die Parameter mit den Pfeiltasten. Sobald wir die Auswahl bestätigen, wird sie angezeigt Stderr
im Format Tag/Monat/Jahr; Dies kann durch die Verwendung der verwendet werden --Datumsformat
Option mit einem Format, das kompatibel mit Strftime
als Argument angegeben. Um die Ausgabe im Format Jahr/Monat/Tag beispielsweise im Format zu erzielen, würden wir ausführen:
$ Dialog-datieren-format%y/%m/%d-Kalendar "Wählen Sie ein Datum" 0 0 27 05 2020
Fordern Sie den Benutzer zur Bestätigung ein: das Yesno -Widget
Wir haben dieses Widget bereits begegnet: Wir haben den Benutzer zur Bestätigung aufgefordert. Bei der Verwendung geben wir die Frage an, die über die gestellt werden soll Text
Parameter. Abhängig von der Wahl der Benutzer wird ein Exit -Status zurückgegeben: 0
Wenn der Benutzer bestätigt, indem Sie auf die klicken Ja
Taste, 1
ansonsten.
Um dieses Widget aufzurufen, müssen wir die verwenden --ja Nein
Möglichkeit:
$ dialog -ja yesno "bestätigen Sie?"0 0
Hier ist das Widget:
Verwalten der Ausgabe, die von einem Widget erzeugt wird
Standardmäßig wird die von einem Widget erzeugte Ausgabe auf STDERR angezeigt. So müssen wir beispielsweise die Daten, die von einem Widget in eine Datei erhalten wurden Stderr
In der Datei (wenn Sie mit Umbauten nicht vertraut sind, sollten Sie sich möglicherweise die Einführung in das Tutorial für Bash -Shell -Umbauten ansehen):
$ Dialog -Checklist "Elemente auswählen:" 0 0 0 \ 1 "Auswahl Nummer eins" aus \ 2 "Auswahl Nummer zwei" auf \ 3 "Auswahl Nummer drei" Aus \ 4 "Auswahl Nummer vier" auf 2> Auswahl.txt
Sobald der Benutzer seine Auswahl bestätigt, werden er geschrieben, platz getrennt in die Auswahl.txt
Datei.
Was ist, wenn wir die Auswahl direkt in eine Variable speichern möchten?? Um die Aufgabe zu erfüllen, müssen wir die verwenden --Stdout
Option, damit die Ausgabe des Widgets angezeigt wird Stdin
anstatt Stderr
:
$ Choices = "$ (Dialogfeld -StDout -Checklist" Elemente auswählen: "0 0 0 \ 1" Auswahl Nummer ein vier "auf)"
Im obigen Beispiel ist das Ergebnis der Widget -Verarbeitung über die zugänglich Auswahl
Variable. Vielleicht möchten wir über sie gehen:
$ für die Wahl in $ Choices; echo "$ choice"; fertig 2 4
Um den Prozess des Prozesses zu verwalten ja Nein
Widget müssen wir uns anders verhalten. Das Widget erzeugt, wie wir bereits gesehen haben. Wenn der Benutzer bestätigt und die Frage bestätigt wird, wird der Exit -Code auf festgelegt 0
, sonst zu 1
(Das mag seltsam erscheinen, aber denken Sie daran, das 0
bedeutet OK
während 1
ist ein Exit -Status, der bedeutet, dass ein Befehl nicht erfolgreich war). Wenn wir das wissen, können wir so etwas schreiben wie:
Wenn Dialog-ja, "möchten Sie eine Instanz von Gnome-terminal öffnen ?"0 0; dann klare gnom-terminale fi
Schlussfolgerungen
In diesem Tutorial haben wir gesehen, wie wir das verwenden können Dialog
Anwendung zu verwenden Ncurses
Widget in Shell -Skripten. Zuerst haben wir einige gemeinsame Optionen gesehen, die unabhängig vom Widget -Typ verwendet werden können, als wir uns einige Widgets speziell angesehen haben. Es gibt noch viele weitere Widgets, die mit verwendet werden können Dialog
: Für eine vollständige Liste empfehle ich Ihnen, sich das Anwendungshandbuch anzusehen.
Verwandte Linux -Tutorials:
- Dinge zu installieren auf Ubuntu 20.04
- So integrieren Sie Dialogfelder in Shell -Skripte mit Whiptail
- Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
- Erste Schritte mit Tkinter für Python Tutorial
- Verschachtelte Schleifen in Bash -Skripten
- Dinge zu installieren auf Ubuntu 22.04
- Linux -Befehle: Top 20 wichtigste Befehle, die Sie benötigen, um…
- Dinge zu tun nach der Installation Ubuntu 22.04 Jammy Quallen…
- Grundlegende Linux -Befehle
- Installieren Sie Arch Linux in VMware Workstation
- « Einführung in Python Web Scraping und die schöne Suppenbibliothek
- Kali Linux - Inrelease - Repository -Fix nicht abrufen »