Inhaltsverzeichnis
whipetail oder der Dialog mit dem Anwender

Zitat von Juhu am 19. September 2025, 22:30 UhrUnd damit ist es auch schon gesagt. Wer in der Shell gerne ein scriptchen bastelt oder in einer anderen Script-Sprache der hat das Problem ansprechende Dialoge und Eingabefelder anzeigen zu lassen.
Nicht wenige landen dann bei ncurses oder dialog. Und damit geht die Lernerei erst wieder los. Welche Parameter mit welchen Werten? darf denn verwendet werden.Ich hasse diese Sucherei. Ich liebe kleine Dialogboxen wie ja/nein/vielleicht oder Eingabefelder untereinander oder nebeneinander. Auswahlboxen noch und dann sind 99% der Anforderungen des schripts erledigt.
für alle die so wie ich denken, die sollten, wenn es nicht schon installiert wurde den Befehl
sudo apt install whipetail
aufrufen. Vola wahrscheinlich bekommt ihr die Meldung "ist schon installiert".
Na dann lasst und loslegen und uns einige Erfolgserlebnisse holen.Erfolgserlebnis 1
Als erstes eine kleines Fenster mit einem Hinweis ausgeben.
whiptail --title "Mein 1. Erfolgserlebnis" --msgbox "Das ist eine kleine MessagesBox mit einem Button OK und nichts weiter. Dazu geben wir noch die Zeilen und die Spalten für die Größe mit" 10 60
Erfolgserlebnis 2
Als 2. und 3. Erfolgerlebnis eine yes/no Abfrage. Hier die das Bespiel 2 Beispiel 3 ist als Hausaufgabe zu machen 😉 oder die Lösung kann im Script am Ende gelesen werden.
if whiptail --title "Mein 2. Erfolgslebnis" --yesno "Wir wollen nach einer yes/no Erlebis fragen. Ist das Programmieren von Shellscripts zu schwer?" 8 78; then echo " du hast yes ausgewählt; Macht nichts wir machen weiter. Exit-Status war $?." else echo "Das freut mich, dass es dich nicht anstrengt. Dein Exit-Status war $?" fi echo "Weiter press CR"; read $NIX
Also, was müsste man ändern, wenn man die beiden Ergebnisse auch in einer schönen umrandeten Box haben möchte. Viel Spass mit Übung 3.
Erfolgserlebnis 4
Die Checklist und die Radiolist. Jeder weiss, dass mit den beiden Listen etwas ausgewählt werden soll. Wenn man jetzt die Frage stellt, was sind deine liebsten Autos dann werden gleich mehrere genannt.
Eine typische "CHECKLIST". Auf die Frage dein liebstes Auto, dann kommt wie aus der Pistole geschossen ein Fahrzeug. Eindeutig eine RADIOLISTE. Und damit kann man die beiden List-Typen auch gemeinsam behandeln.Schauen wir uns den Code an. In der ersten Zeile definieren wir mit --checklist bzw --radiolist den Listtyp und danach kommen immer 3 Pärchen
FAHRZEUG=$(whiptail --title "Erfolg Nr. 4" --checklist "Wähle dein Fahrzeug" 20 78 4
"ROLLSCHUH" "Man gehe mit Räder an den Füssen" ON
"ESEL" "Man lasse sich tragen. Langsam kommt man an sein Ziel" OFF
"ENTE" "Der Klassiker unter allen Fahrzeugen. Er kann nicht umfallen" OFF
"ROADRUNNER" "Das schnellste Fahrzeug, Er bringt dich überall hin" OFF
3>&1 1>&2 2>&3 )Ihr seht am Ende der Zeile einen Backslash. Der Backslash sagt der Shell das diese Zeile noch nicht aus ist und die nächste Zeile noch daran gehört. Damit wird die Listung übersichtlicher. Mit wiptail hat dies nichts zu tun wiptail bekommt nur diese "Zeilen" als eine Zeile übergeben.
Ja dann ist da noch eine Besonderheit am Ende der Zeile....
Der Trick dabei ist das dies eigentlich 2 Befehle sind; eine Zuweisung zu einer Variablen und die wiptail Boxen. Bei jedem Befehl werden die 3 Standard File-Desciptoren STDIN, STDOUT und STDERR verwendet. d.h. Alle Ausgaben innerhalb der Klammer laufen über Filedeskriptor 3 und erst am Ende nach der Klammer wird alles wieder zurückgeführt und in die Variable übergeben.Erfolgserlebnis 5
Die Textbox, das haben wir gleich abgearbeitet
whiptail --textbox /etc/motd 12 80
zeigt den Inhalt der "Message of the Day" Datei in einer Box an. Für jede Art der Ausgabe geeignet z.b. Fehlerlogs etc.
Erfolgserlebnis 6
Die Inputbox
mein_text=$(whiptail --inputbox "Hier soll dann etwas sinnvolles stehen" 8 39 "sinnvoller Text" --title "Mein Dialog" 3>&1 1>&2 2>&3)den Trick mit den File-Deskriptoren kennen wir ja schon. Also hat die Variable $mein_text den Inhalt des Fensters.
zum Abschluß möchte ich euch auf folgende weiteren Infos hinweisen.
man whiptail bzw. whiptail --help
und eine gute Beschreibung findet man unter https://en.wikibooks.org/wiki/Bash_Shell_Scripting/WhiptailViel Spass dabei. Hier noch die Auflösung der Hausaufgabe
# Das gleiche nocmals mit einer msg-box Aber die Antworten kommen auch gleich hübsch # if whiptail --title "Mein 3. Erfolgslebnis" --yesno "Wir wollen nach einem yes/no Erlebis fragen. Ist das Programmieren von Shellscripts zu schwer?." 8 78; then whiptail --title "Mein 3. Erfolgserlebnis" --msgbox "du hast yes aus gewählt; Macht nichts, wir machen weiter, exit status was $?." 10 60 else whiptail --title "Mein 3. Erfolgserlebnis" --msgbox "Das freut mich das es dich nicht anstrengt. Dein Exit-Status war $?. " 10 60 fi # #Wie immer liefert 0 OK und 1 den wert für nicht OK. Oder anders true ist der Wert 0 und false ist der Wert 1. Dies wäre die korrekte Aussage bei solchen Abfragen. #aber so genau wollen wir nicht sein ;-)
Und damit ist es auch schon gesagt. Wer in der Shell gerne ein scriptchen bastelt oder in einer anderen Script-Sprache der hat das Problem ansprechende Dialoge und Eingabefelder anzeigen zu lassen.
Nicht wenige landen dann bei ncurses oder dialog. Und damit geht die Lernerei erst wieder los. Welche Parameter mit welchen Werten? darf denn verwendet werden.
Ich hasse diese Sucherei. Ich liebe kleine Dialogboxen wie ja/nein/vielleicht oder Eingabefelder untereinander oder nebeneinander. Auswahlboxen noch und dann sind 99% der Anforderungen des schripts erledigt.
für alle die so wie ich denken, die sollten, wenn es nicht schon installiert wurde den Befehl
sudo apt install whipetail
aufrufen. Vola wahrscheinlich bekommt ihr die Meldung "ist schon installiert".
Na dann lasst und loslegen und uns einige Erfolgserlebnisse holen.
Erfolgserlebnis 1
Als erstes eine kleines Fenster mit einem Hinweis ausgeben.
whiptail --title "Mein 1. Erfolgserlebnis" --msgbox "Das ist eine kleine MessagesBox mit einem Button OK und nichts weiter. Dazu geben wir noch die Zeilen und die Spalten für die Größe mit" 10 60
Erfolgserlebnis 2
Als 2. und 3. Erfolgerlebnis eine yes/no Abfrage. Hier die das Bespiel 2 Beispiel 3 ist als Hausaufgabe zu machen 😉 oder die Lösung kann im Script am Ende gelesen werden.
if whiptail --title "Mein 2. Erfolgslebnis" --yesno "Wir wollen nach einer yes/no Erlebis fragen. Ist das Programmieren von Shellscripts zu schwer?" 8 78;
then
echo " du hast yes ausgewählt; Macht nichts wir machen weiter. Exit-Status war $?."
else
echo "Das freut mich, dass es dich nicht anstrengt. Dein Exit-Status war $?"
fi
echo "Weiter press CR"; read $NIX
Also, was müsste man ändern, wenn man die beiden Ergebnisse auch in einer schönen umrandeten Box haben möchte. Viel Spass mit Übung 3.
Erfolgserlebnis 4
Die Checklist und die Radiolist. Jeder weiss, dass mit den beiden Listen etwas ausgewählt werden soll. Wenn man jetzt die Frage stellt, was sind deine liebsten Autos dann werden gleich mehrere genannt.
Eine typische "CHECKLIST". Auf die Frage dein liebstes Auto, dann kommt wie aus der Pistole geschossen ein Fahrzeug. Eindeutig eine RADIOLISTE. Und damit kann man die beiden List-Typen auch gemeinsam behandeln.
Schauen wir uns den Code an. In der ersten Zeile definieren wir mit --checklist bzw --radiolist den Listtyp und danach kommen immer 3 Pärchen
FAHRZEUG=$(whiptail --title "Erfolg Nr. 4" --checklist "Wähle dein Fahrzeug" 20 78 4
"ROLLSCHUH" "Man gehe mit Räder an den Füssen" ON
"ESEL" "Man lasse sich tragen. Langsam kommt man an sein Ziel" OFF
"ENTE" "Der Klassiker unter allen Fahrzeugen. Er kann nicht umfallen" OFF
"ROADRUNNER" "Das schnellste Fahrzeug, Er bringt dich überall hin" OFF
3>&1 1>&2 2>&3 )
Ihr seht am Ende der Zeile einen Backslash. Der Backslash sagt der Shell das diese Zeile noch nicht aus ist und die nächste Zeile noch daran gehört. Damit wird die Listung übersichtlicher. Mit wiptail hat dies nichts zu tun wiptail bekommt nur diese "Zeilen" als eine Zeile übergeben.
Ja dann ist da noch eine Besonderheit am Ende der Zeile....
Der Trick dabei ist das dies eigentlich 2 Befehle sind; eine Zuweisung zu einer Variablen und die wiptail Boxen. Bei jedem Befehl werden die 3 Standard File-Desciptoren STDIN, STDOUT und STDERR verwendet. d.h. Alle Ausgaben innerhalb der Klammer laufen über Filedeskriptor 3 und erst am Ende nach der Klammer wird alles wieder zurückgeführt und in die Variable übergeben.
Erfolgserlebnis 5
Die Textbox, das haben wir gleich abgearbeitet
whiptail --textbox /etc/motd 12 80
zeigt den Inhalt der "Message of the Day" Datei in einer Box an. Für jede Art der Ausgabe geeignet z.b. Fehlerlogs etc.
Erfolgserlebnis 6
Die Inputbox
mein_text=$(whiptail --inputbox "Hier soll dann etwas sinnvolles stehen" 8 39 "sinnvoller Text" --title "Mein Dialog" 3>&1 1>&2 2>&3)
den Trick mit den File-Deskriptoren kennen wir ja schon. Also hat die Variable $mein_text den Inhalt des Fensters.
zum Abschluß möchte ich euch auf folgende weiteren Infos hinweisen.
man whiptail bzw. whiptail --help
und eine gute Beschreibung findet man unter https://en.wikibooks.org/wiki/Bash_Shell_Scripting/Whiptail
Viel Spass dabei. Hier noch die Auflösung der Hausaufgabe
# Das gleiche nocmals mit einer msg-box Aber die Antworten kommen auch gleich hübsch
#
if whiptail --title "Mein 3. Erfolgslebnis" --yesno "Wir wollen nach einem yes/no Erlebis fragen. Ist das Programmieren von Shellscripts zu schwer?." 8 78;
then
whiptail --title "Mein 3. Erfolgserlebnis" --msgbox "du hast yes aus gewählt; Macht nichts, wir machen weiter, exit status was $?." 10 60
else
whiptail --title "Mein 3. Erfolgserlebnis" --msgbox "Das freut mich das es dich nicht anstrengt. Dein Exit-Status war $?. " 10 60
fi
#
#Wie immer liefert 0 OK und 1 den wert für nicht OK. Oder anders true ist der Wert 0 und false ist der Wert 1. Dies wäre die korrekte Aussage bei solchen Abfragen.
#aber so genau wollen wir nicht sein ;-)