{"id":20274,"date":"2025-09-19T22:30:12","date_gmt":"2025-09-19T20:30:12","guid":{"rendered":"https:\/\/linux-bibel.at\/?p=20274"},"modified":"2025-09-21T11:06:25","modified_gmt":"2025-09-21T09:06:25","slug":"whipetail-oder-der-dialog-mit-dem-anwender","status":"publish","type":"post","link":"https:\/\/linux-bibel.at\/index.php\/2025\/09\/19\/whipetail-oder-der-dialog-mit-dem-anwender\/","title":{"rendered":"whiptail oder der Dialog mit dem Anwender"},"content":{"rendered":"\r\n<p>Und damit ist es auch schon gesagt. Wer in der <a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/shell\/\" target=\"_self\" title=\"Bei einer Shell handelt es sich um einen Interpreter, der Eingaben vom Benutzer f&uuml;r das Betriebssystem in die Maschinensprache &uuml;bersetzt und Ausgaben vom Betriebssystem f&uuml;r den Benutzer verst&auml;ndlich am Terminal wieder ausgibt. Bekannte Shells unter Linux w&auml;ren etwa die Bash, Zsh, Fish, die Korn-Shell.\" class=\"encyclopedia\">Shell<\/a> gerne ein <a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/script\/\" target=\"_self\" title=\"Mit einem Script ist ein kleines Programm im Textformat gemeint, dass nicht kompiliert, sondern von einem Interpreter direkt ausgef&uuml;hrt wird. Als Beispiel Linux Shell Scripts f&uuml;r Linux, oder auch Perl Scripts, die durch einen Perl Interpreter ausgef&uuml;hrt werden.\" class=\"encyclopedia\">script<\/a>chen bastelt oder in einer anderen <a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/script\/\" target=\"_self\" title=\"Mit einem Script ist ein kleines Programm im Textformat gemeint, dass nicht kompiliert, sondern von einem Interpreter direkt ausgef&uuml;hrt wird. Als Beispiel Linux Shell Scripts f&uuml;r Linux, oder auch Perl Scripts, die durch einen Perl Interpreter ausgef&uuml;hrt werden.\" class=\"encyclopedia\">Script<\/a>-Sprache der hat das Problem ansprechende Dialoge und Eingabefelder anzeigen zu lassen. <br>Nicht wenige <a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/lan\/\" target=\"_self\" title=\"Ein LAN (Local Area Network) ist ein lokales Netzwerk, das in der Regel in einem begrenzten physischen Bereich wie einem Geb&auml;ude oder einem Haus eingerichtet ist. Es erm&ouml;glicht die Kommunikation und den Datenaustausch zwischen verschiedenen Ger&auml;ten wie Computern, Laptops, Druckern und Speicherger&auml;ten innerhalb des Netzwerks. LANs k&ouml;nnen sowohl kabelgebunden als auch drahtlos eingerichtet werden, wobei&hellip;\" class=\"encyclopedia\">lan<\/a>den dann bei ncurses oder dialog. Und damit geht die Lernerei erst wieder los. Welche Pa<a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/ram\/\" target=\"_self\" title=\"Der RAM oder Arbeitsspeicher ist ein essentieller Bestandteil eines Rechners, der als fl&uuml;chtiger und sehr schneller Speicher fungiert. Er erm&ouml;glicht es dem Computer, Daten sehr schnell zu lesen und zu ver&auml;ndern, und spielt eine entscheidende Rolle f&uuml;r die Leistungsf&auml;higkeit des Systems. Der Arbeitsspeicher ist ein tempor&auml;rer Speicher, was bedeutet, dass die gespeicherten Informationen verloren gehen,&hellip;\" class=\"encyclopedia\">ram<\/a>eter mit welchen Werten? darf denn verwendet werden.<\/p>\r\n\r\n\r\n\r\n<p>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. <br><br>f&uuml;r alle die so wie ich denken, die sollten, wenn es nicht schon installiert wurde den <a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/befehl\/\" target=\"_self\" title=\"Ein Befehl in Linux ist eine Anweisung, die &uuml;ber die Kommandozeile eingegeben wird, um verschiedene Aktionen auszuf&uuml;hren. Mit Linux-Befehlen k&ouml;nnen Sie Ihr System steuern, Dateien verwalten, Programme ausf&uuml;hren und vieles mehr. Hier sind einige wichtige Linux-Befehle: ls: Zeigt den Inhalt des aktuellen Verzeichnisses an. cd: Wechselt das Verzeichnis. mkdir: Erstellt ein neues Verzeichnis. rm: L&ouml;scht&hellip;\" class=\"encyclopedia\">Befehl<\/a><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>sudo apt install whiptail <\/code><\/pre>\r\n\r\n\r\n\r\n<p>aufrufen. Vola wahrscheinlich bekommt ihr die Meldung &bdquo;ist schon installiert&ldquo;. <br>Na dann lasst und loslegen und uns einige Erfolgserlebnisse holen.<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Erfolgserlebnis 1<\/h2>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>Als erstes eine kleines Fenster mit einem Hinweis ausgeben.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>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\u00fcr die Gr\u00f6\u00dfe mit\" 10 60\r\n\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Erfolgserlebnis 2<\/h2>\r\n\r\n\r\n\r\n<p>Als 2. und 3. Erfolgerlebnis eine yes\/no Abfrage. Hier die das Bespiel 2 Beispiel 3 ist als Hausaufgabe zu machen \ud83d\ude09 oder die L&ouml;sung kann im <a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/script\/\" target=\"_self\" title=\"Mit einem Script ist ein kleines Programm im Textformat gemeint, dass nicht kompiliert, sondern von einem Interpreter direkt ausgef&uuml;hrt wird. Als Beispiel Linux Shell Scripts f&uuml;r Linux, oder auch Perl Scripts, die durch einen Perl Interpreter ausgef&uuml;hrt werden.\" class=\"encyclopedia\">Script<\/a> am Ende gelesen werden.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>if whiptail --title \"Mein 2. Erfolgslebnis\" --yesno \"Wir wollen nach einer yes\/no Erlebis fragen. Ist das Programmieren von Shellscripts zu schwer?\" 8 78;\r\nthen\r\necho \" du hast yes ausgew\u00e4hlt; Macht nichts wir machen weiter. Exit-Status war $?.\"\r\nelse\r\necho \"Das freut mich, dass es dich nicht anstrengt. Dein Exit-Status war $?\"\r\nfi\r\necho \"Weiter press CR\"; read $NIX\r\n <\/code><\/pre>\r\n\r\n\r\n\r\n<p>Also, was m&uuml;sste man &auml;ndern, wenn man die beiden Ergebnisse auch in einer sch&ouml;nen umrandeten Box haben m&ouml;chte. Viel Spass mit &Uuml;bung 3.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Erfolgserlebnis 4<\/h2>\r\n\r\n\r\n\r\n<p>Die Checklist und die Radiolist. Jeder weiss, dass mit den beiden Listen etwas ausgew&auml;hlt werden soll. Wenn man jetzt die Frage stellt, was sind deine liebsten Autos dann werden gleich mehrere genannt. <br>Eine typische &bdquo;CHECKLIST&ldquo;. 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.<\/p>\r\n\r\n\r\n\r\n<p>Schauen wir uns den Code an. In der ersten Zeile definieren wir mit &ndash;checklist bzw &ndash;radiolist den Listtyp und danach kommen immer 3 P&auml;rchen<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">FAHRZEUG=$(whiptail --title \"Erfolg Nr. 4\" --checklist \"W\u00e4hle dein Fahrzeug\" 20 78 4 <strong>\\<\/strong><br \/>\"ROLLSCHUH\" \"Man gehe mit R\u00e4der an den F\u00fcssen\" ON <strong>\\<\/strong><br \/>\"ESEL\" \"Man lasse sich tragen. Langsam kommt man an sein Ziel\" OFF <strong>\\<\/strong><br \/>\"ENTE\" \"Der Klassiker unter allen Fahrzeugen. Er kann nicht umfallen\" OFF <strong>\\<\/strong><br \/>\"ROADRUNNER\" \"Das schnellste Fahrzeug, Er bringt dich \u00fcberall hin\" OFF \\<br \/>3&gt;&amp;1 1&gt;&amp;2 2&gt;&amp;3 )<\/pre>\r\n\r\n\r\n\r\n<p>Ihr seht am Ende der Zeile einen \\ Backslash. Der Backslash sagt der <a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/shell\/\" target=\"_self\" title=\"Bei einer Shell handelt es sich um einen Interpreter, der Eingaben vom Benutzer f&uuml;r das Betriebssystem in die Maschinensprache &uuml;bersetzt und Ausgaben vom Betriebssystem f&uuml;r den Benutzer verst&auml;ndlich am Terminal wieder ausgibt. Bekannte Shells unter Linux w&auml;ren etwa die Bash, Zsh, Fish, die Korn-Shell.\" class=\"encyclopedia\">Shell<\/a> das diese Zeile noch nicht aus ist und die n&auml;chste Zeile noch daran geh&ouml;rt. Damit wird die Listung &uuml;bersichtlicher. Mit wiptail hat dies nichts zu tun wiptail bekommt nur diese &bdquo;Zeilen&ldquo; als eine Zeile &uuml;bergeben.<\/p>\r\n\r\n\r\n\r\n<p><br>Ja dann ist da noch eine Besonderheit am Ende der Zeile&hellip;.<br>Der Trick dabei ist das dies eigentlich 2 <a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/befehl\/\" target=\"_self\" title=\"Ein Befehl in Linux ist eine Anweisung, die &uuml;ber die Kommandozeile eingegeben wird, um verschiedene Aktionen auszuf&uuml;hren. Mit Linux-Befehlen k&ouml;nnen Sie Ihr System steuern, Dateien verwalten, Programme ausf&uuml;hren und vieles mehr. Hier sind einige wichtige Linux-Befehle: ls: Zeigt den Inhalt des aktuellen Verzeichnisses an. cd: Wechselt das Verzeichnis. mkdir: Erstellt ein neues Verzeichnis. rm: L&ouml;scht&hellip;\" class=\"encyclopedia\">Befehl<\/a>e sind; eine Zuweisung zu einer Variablen und die wiptail Boxen. Bei jedem <a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/befehl\/\" target=\"_self\" title=\"Ein Befehl in Linux ist eine Anweisung, die &uuml;ber die Kommandozeile eingegeben wird, um verschiedene Aktionen auszuf&uuml;hren. Mit Linux-Befehlen k&ouml;nnen Sie Ihr System steuern, Dateien verwalten, Programme ausf&uuml;hren und vieles mehr. Hier sind einige wichtige Linux-Befehle: ls: Zeigt den Inhalt des aktuellen Verzeichnisses an. cd: Wechselt das Verzeichnis. mkdir: Erstellt ein neues Verzeichnis. rm: L&ouml;scht&hellip;\" class=\"encyclopedia\">Befehl<\/a> werden die 3 Standard File-Descip<a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/tor\/\" target=\"_self\" title='Unter \"Tor\" versteht man das Tor-Netzwerk, das als Anonymisierungsdienst f&uuml;r den Internetverkehr dient. Das Tor-Netzwerk erm&ouml;glicht es den Benutzern, ihre Identit&auml;t und ihren Standort zu verschleiern, indem der Datenverkehr &uuml;ber mehrere Server (Nodes) geleitet wird, bevor er sein Ziel erreicht. Dadurch wird es schwieriger, die Aktivit&auml;ten der Benutzer im Internet zu verfolgen oder zu &uuml;berwachen.&hellip;' class=\"encyclopedia\">tor<\/a>en STDIN, STDOUT und STDERR verwendet. d.h. Alle Ausgaben innerhalb der Klammer laufen &uuml;ber Filedeskrip<a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/tor\/\" target=\"_self\" title='Unter \"Tor\" versteht man das Tor-Netzwerk, das als Anonymisierungsdienst f&uuml;r den Internetverkehr dient. Das Tor-Netzwerk erm&ouml;glicht es den Benutzern, ihre Identit&auml;t und ihren Standort zu verschleiern, indem der Datenverkehr &uuml;ber mehrere Server (Nodes) geleitet wird, bevor er sein Ziel erreicht. Dadurch wird es schwieriger, die Aktivit&auml;ten der Benutzer im Internet zu verfolgen oder zu &uuml;berwachen.&hellip;' class=\"encyclopedia\">tor<\/a> 3 und erst am Ende nach der Klammer wird alles wieder zur&uuml;ckgef&uuml;hrt und in die Variable &uuml;bergeben.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Erfolgserlebnis 5<\/h2>\r\n\r\n\r\n\r\n<p>Die Textbox, das haben wir gleich abgearbeitet<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>whiptail --textbox \/etc\/motd 12 80 <\/code><\/pre>\r\n\r\n\r\n\r\n<p>zeigt den Inhalt der &bdquo;Message of the Day&ldquo; <a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/datei\/\" target=\"_self\" title='Unter \"Datei\" versteht man eine Einheit, die Informationen oder Daten enth&auml;lt. Dateien k&ouml;nnen verschiedene Arten von Inhalten haben, wie Text, Bilder, Audiodateien oder ausf&uuml;hrbare Programme. In Linux werden Dateien in einem hierarchischen Dateisystem organisiert, das &auml;hnlich wie ein Verzeichnisbaum aufgebaut ist. Das Wurzelverzeichnis \"\/\" ist der oberste Knoten des Verzeichnisbaums und enth&auml;lt alle anderen Dateien&hellip;' class=\"encyclopedia\">Datei<\/a> in einer Box an. F&uuml;r jede Art der Ausgabe geeignet z.b. Fehlerlogs etc.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Erfolgserlebnis 6<\/h2>\r\n\r\n\r\n\r\n<p>Die Inputbox<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">mein_text=<strong>$(<\/strong>whiptail --inputbox \"Hier soll dann etwas sinnvolles stehen\" 8 39 \"sinnvoller Text\" --title \"Mein Dialog\" 3&gt;&amp;1 1&gt;&amp;2 2&gt;&amp;3<strong>)<\/strong><\/pre>\r\n\r\n\r\n\r\n<p>den Trick mit den File-Deskrip<a href=\"https:\/\/linux-bibel.at\/index.php\/enzyklopaedie\/tor\/\" target=\"_self\" title='Unter \"Tor\" versteht man das Tor-Netzwerk, das als Anonymisierungsdienst f&uuml;r den Internetverkehr dient. Das Tor-Netzwerk erm&ouml;glicht es den Benutzern, ihre Identit&auml;t und ihren Standort zu verschleiern, indem der Datenverkehr &uuml;ber mehrere Server (Nodes) geleitet wird, bevor er sein Ziel erreicht. Dadurch wird es schwieriger, die Aktivit&auml;ten der Benutzer im Internet zu verfolgen oder zu &uuml;berwachen.&hellip;' class=\"encyclopedia\">tor<\/a>en kennen wir ja schon. Also hat die Variable $mein_text den Inhalt des Fensters.<\/p>\r\n\r\n\r\n\r\n<p>zum Abschlu&szlig; m&ouml;chte ich euch auf folgende weiteren Infos hinweisen.<\/p>\r\n\r\n\r\n\r\n<p>man whiptail bzw. whiptail &ndash;help <br>und eine gute Beschreibung findet man unter <a href=\"https:\/\/en.wikibooks.org\/wiki\/Bash_Shell_Scripting\/Whiptail\">https:\/\/en.wikibooks.org\/wiki\/Bash_Shell_Scripting\/Whiptail<\/a><\/p>\r\n\r\n\r\n\r\n<p>Viel Spass dabei. Hier noch die Aufl&ouml;sung der Hausaufgabe<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code># Das gleiche nocmals mit einer msg-box Aber die Antworten kommen auch gleich h\u00fcbsch \r\n#\r\nif whiptail --title \"Mein 3. Erfolgslebnis\" --yesno \"Wir wollen nach einem yes\/no Erlebis fragen. Ist das Programmieren von Shellscripts zu schwer?.\" 8 78;\r\n then\r\nwhiptail --title \"Mein 3. Erfolgserlebnis\" --msgbox \"du hast yes aus gew\u00e4hlt; Macht nichts, wir machen weiter, exit status was $?.\" 10 60\r\nelse\r\nwhiptail --title \"Mein 3. Erfolgserlebnis\" --msgbox \"Das freut mich das es dich nicht anstrengt. Dein Exit-Status war $?. \" 10 60\r\nfi\r\n#\r\n#Wie immer liefert 0 OK und 1 den wert f\u00fcr nicht OK. Oder anders true ist der Wert 0 und false ist der Wert 1. Dies w\u00e4re die korrekte Aussage bei solchen Abfragen.\r\n#aber so genau wollen wir nicht sein ;-)\r\n\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n<div class=\"pld-like-dislike-wrap pld-custom\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir\" data-post-id=\"20274\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Hoch.png\" alt=\"Gef\u00e4llt mir\" \/>\r\n            <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">2    <\/span>\r\n<\/div><div class=\"pld-dislike-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-dislike-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir nicht\" data-post-id=\"20274\" data-trigger-type=\"dislike\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Runter.png\" alt=\"Gef\u00e4llt mir nicht\" \/>\r\n            <\/a>\r\n    <span class=\"pld-dislike-count-wrap pld-count-wrap\"><\/span>\r\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>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 [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":20281,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-20274","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein"],"_links":{"self":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/20274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/comments?post=20274"}],"version-history":[{"count":11,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/20274\/revisions"}],"predecessor-version":[{"id":20304,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/20274\/revisions\/20304"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media\/20281"}],"wp:attachment":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media?parent=20274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/categories?post=20274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/tags?post=20274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}