{"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 class=\"wp-block-paragraph\">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. <br \/>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.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">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\u00fcr alle die so wie ich denken, die sollten, wenn es nicht schon installiert wurde den Befehl<\/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 class=\"wp-block-paragraph\">aufrufen. Vola wahrscheinlich bekommt ihr die Meldung &#8222;ist schon installiert&#8220;. <br \/>Na dann lasst und loslegen und uns einige Erfolgserlebnisse holen.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&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 class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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\u00f6sung kann im Script 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 class=\"wp-block-paragraph\">Also, was m\u00fcsste man \u00e4ndern, wenn man die beiden Ergebnisse auch in einer sch\u00f6nen umrandeten Box haben m\u00f6chte. Viel Spass mit \u00dcbung 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 class=\"wp-block-paragraph\">Die Checklist und die Radiolist. Jeder weiss, dass mit den beiden Listen etwas ausgew\u00e4hlt werden soll. Wenn man jetzt die Frage stellt, was sind deine liebsten Autos dann werden gleich mehrere genannt. <br \/>Eine typische &#8222;CHECKLIST&#8220;. 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 class=\"wp-block-paragraph\">Schauen wir uns den Code an. In der ersten Zeile definieren wir mit &#8211;checklist bzw &#8211;radiolist den Listtyp und danach kommen immer 3 P\u00e4rchen<\/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 class=\"wp-block-paragraph\">Ihr seht am Ende der Zeile einen \\ Backslash. Der Backslash sagt der Shell das diese Zeile noch nicht aus ist und die n\u00e4chste Zeile noch daran geh\u00f6rt. Damit wird die Listung \u00fcbersichtlicher. Mit wiptail hat dies nichts zu tun wiptail bekommt nur diese &#8222;Zeilen&#8220; als eine Zeile \u00fcbergeben.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><br \/>Ja dann ist da noch eine Besonderheit am Ende der Zeile&#8230;.<br \/>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 \u00fcber Filedeskriptor 3 und erst am Ende nach der Klammer wird alles wieder zur\u00fcckgef\u00fchrt und in die Variable \u00fcbergeben.<\/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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">zeigt den Inhalt der &#8222;Message of the Day&#8220; Datei in einer Box an. F\u00fcr 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">den Trick mit den File-Deskriptoren kennen wir ja schon. Also hat die Variable $mein_text den Inhalt des Fensters.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">zum Abschlu\u00df m\u00f6chte ich euch auf folgende weiteren Infos hinweisen.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">man whiptail bzw. whiptail &#8211;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 class=\"wp-block-paragraph\">Viel Spass dabei. Hier noch die Aufl\u00f6sung der Hausaufgabe<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&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 class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&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}]}}