Textbasierte User-Interfaces (Teil 1)

Aus LinuxUser 09/2010

Textbasierte User-Interfaces (Teil 1)

© redzonk, sxc.hu

Bunte Shell

Die Kommandozeile halten viele Anwender für trist und schlecht bedienbar. Das muss aber nicht so sein: Mithilfe von Dialog und Whiptail werten Sie Ihre eigenen Skripts unkompliziert mit Fenstern, Menüs und Dialogen auf.

Shellskripte speichern eine Abfolge von Kommandozeilenbefehlen. Diese Abfolge legt man sinnigerweise in einem Skript ab und kann sie danach beliebig oft wieder ausführen. Als erstes Beispiel erstellen Sie mit einem Texteditor Ihrer Wahl ein Bash-Skript namens kalender, das im Moment nur den nützlichen Kalender ncal aufruft:

#!/bin/bash
ncal

Um das Skript aufrufen zu können, müssen Sie es zunächst mit dem Kommando chmod +x kalender noch ausführbar machen. Das Kommando ./kalender in einem Terminal zeigt nun den laufenden Kalendermonat an, in dem der aktuelle Tag hervorgehoben ist (Abbildung 1).

Abbildung 1: Die Ausgabe von Ncal im Terminal.

Abbildung 1: Die Ausgabe von Ncal im Terminal.

Sie können dem Programm Ncal Aufrufparameter übermitteln, um sowohl Monat als auch Jahr exakt zu spezifizieren. In den beiden Variablen monat und jahr legen Sie den Wunschzeitraum fest. Die entsprechenden Zuweisungen erfolgen in den Zeilen 3 und 4 von Listing 1.

Listing 1

#!/bin/bash
# Variablen
monat="8"
jahr="2010"
# Kalender
ncal $monat $jahr

Bei jedem Aufruf listet kalender jetzt den August 2010 auf. Um etwas mehr Entscheidungsfreiheit zu erhalten, erweitern Sie das Kalender-Skript um eine Auswahl für die Monate September, Oktober und November (Listing 2). Als vierter Auswahlpunkt kommt der Eintrag Ende hinzu, mit dem man das Skript verlassen kann. Treffen Sie keine explizite Auswahl, drücken also am Prompt beispielsweise einfach die Eingabetaste, erscheint eine Fehlermeldung Ungültige Auswahl, und das Auswahlmenü erscheint erneut.

Listing 2

#!/bin/bash
# Variablen
PS3="Ihre Wahl: "
monat=""
jahr="2010"
# Auswahl
select monat in September Oktober November Ende
do
  case "$monat" in
    Ende) echo "Ende."; exit ;;
    1) monat="9"; break ;;
    2) monat="10"; break ;;
    3) monat="11"; break ;;
    "") echo "Ungültige Auswahl" ;;
  esac
  ncal $monat $jahr
done

Diese Variante ist schon recht hübsch (Abbildung 2), aber noch etwas fehlerträchtig. Das Auswerten der Benutzereingaben gestaltet sich bei längeren Listen aufwendig und bildet eigentlich nicht die vorrangige Zielstellung. In den nachfolgenden Beispielen versuchen wir, dieses Manko möglichst weitgehend zu minimieren.

Abbildung 2: Die Ausgaben des erweiterten Kalender-Skripts.

Abbildung 2: Die Ausgaben des erweiterten Kalender-Skripts.

Textbasierte Toolkits

Bevor grafischen Benutzeroberflächen populär wurden, sahen Eingabemasken und Fenster noch etwas anders aus: Sie setzten sich aus ASCII-Zeichen zusammen und richteten sich in Größe und Darstellung an den Eckdaten 80 Zeichen/Zeile und 25 Zeichen/Spalte aus. Heute liefert das Terminalfenster oder die Konsole die Werte für Breite und Höhe.

Die maximale Größe eines Textfensters ermitteln Sie mit dem Aufruf dialog --print-maxsize. Als Ergebnis erhalten Sie die Anzahl von Zeilen und Spalten, die dieses Terminal aktuell darstellen kann. Zur Ermittlung der Werte nutzen Sie alternativ auch das Kommando resize, das beim Aufruf ohne Parameter ebenfalls die aktuellen Werte ermittelt und ausgibt (Abbildung 3).

Abbildung 3: Mit <code srcset=

resize ermitteln Sie im Terminal die Anzahl der Zeilen und Spalten.” width=”300″ height=”189″ /> Abbildung 3: Mit resize ermitteln Sie im Terminal die Anzahl der Zeilen und Spalten.

Anwendungen mit die textbasierten Oberflächen gibt es unter Linux zuhauf. Populäre Beispiele sind der Midnight Commander (mc), der Texteditor vim, das Red-Hat/Fedora-Installationsprogramm anaconda, Debians Paketverwaltungswerkzeug aptitude oder auch Ghost for Linux (g4l), ein Werkzeug zum Sichern und Wiederherstellen von Festplatten und Partitionen .

All diese Anwendungen nutzen zum Darstellen ihrer Oberfläche spezielle Bibliotheken, die viele Anwender nicht kennen, obwohl sie meist bereits auf dem System installiert sind:

  • Bei Ncurses [1] handelt es sich um einen Klon der Originalbibliothek Curses aus dem Unix System V Rel. 4.0 (SVr4). Für das frei verfügbare Ncurses gibt es Bindungen unter anderem an C, Perl, Python und Ruby. Die Ncurses-Bibliotheken stecken in den libncurses-Paketen des Systems. Das Paket dialog vereinfacht die Ansteuerung der Ncurses-Bibliotheken, sodass sie Sie auch direkt von der Shell aus nutzen können.
  • CDK ([2],[3]) basiert auf der Ncurses-Bibliothek und versteht sich als Zusammenstellung fertiger Bausteine für Textoberflächen. Auf diese Weise will CDK die Verwendung der Ncurses-Bibliothek vereinfachen und die Entwicklungszeit minimieren. Es existieren C- und Perl-Bindungen, verfügbar im Debian-Paket libcdk.
  • Newt (“Not Erik’s Windowing Toolkit”, [4]) wurde ursprünglich von Erik Troan bei Red Hat entwickelt. Newt basiert auf der S-Lang-Bibliothek und beinhaltet Eingabefenster, verschiedene Auswahlboxen, Textfelder und Knöpfe (Buttons). Es gibt Bindungen an die Bash (Paket whiptail) sowie an die Programmiersprachen C, Python, Perl und Tcl. Für Python heißt das fragliche Debian-Paket python-newt.

Alle genannten Bibliotheken haben gemeinsam, dass man mit ihrer Hilfe ohne großen Aufwand einfache und für den Anwender gut handhabbare Eingabefenster erstellen kann. So kann sich der Benutzer ganz auf sein Ziel konzentrieren, ohne dass ihn bunte, blinkende Hinweise und viele Knöpfen ablenken. Weiterhin gehen die Bibliotheken sparsam mit Ressourcen um, was sich insbesondere auf mobilen Geräten und bei Verbindungen zu anderen Rechnern, etwa via SSH, positiv bemerkbar macht.

Dialog basiert auf Ncurses und lässt sich mit wenigen Schritten in eigene Shellskripte integrieren. Whiptail gilt als gleichwertige Alternative zu Dialog, arbeitet jedoch mit dem Newt-Toolkit. Wie immer, liegen auch hier die Unterschiede im Detail: Whiptail beispielsweise löscht nach Verlassen des Dialogfensters automatisch den Bildschirm, Dialog nicht. In Shellskripten findet sich daher nach einem Dialog-Kommando häufig der Aufruf clear.

Kleine Eingabefelder erstellen

Über Parameter und die Standardeingabe lassen sich sowohl der Inhalt als auch das Aussehen der Dialogboxen zusätzlich steuern. Vom Benutzer ausgewählte Menüpunkte, Eingabewerte und eventuell auftretende Fehlercodes übermitteln Dialog und Whiptail über die Standardausgabe und durch den Rückkehrwert des Aufrufs. So lassen sich die Rückmeldungen direkt im aufrufenden Skript weiterverarbeiten. Dialog und Whiptail verfügen über folgende, allgemeine Syntax:

$ dialog Optionen Fensterdetails
$ whiptail Optionen Fensterdetails

Die Liste der Optionen fällt recht umfangreich aus, in diesem Beitrag kommt allerdings nur eine davon zum Einsatz – dazu später mehr. Die Fensterdetails spezifizieren das Eingabefeld näher. Der Aufbau folgt dem Schema Fenstertyp“Titel”BreiteHöhe.

Der Fenstertyp bezeichnet die Art der Eingabebox – so gibt es beispielsweise einfache Hinweisboxen, Fenster mit einer Entscheidungsfrage und Fenster mit einer kleinen Eingabezeile. Der Titel erscheint in der Kopfzeile des Fensters. Enthält er Leerzeichen, müssen Sie den kompletten Text für den Titel in Anführungszeichen einschließen.

Breite und Höhe geben die Fenstergröße nicht in Pixeln an, sondern als Zeichenanzahl. Belegen Sie beide Parameter jeweils mit dem Wert 0, belegt die Box automatisch nur das absolut notwendige Minimum an Platz auf dem Bildschirm.

Als erstes Beispiel erstellen Sie ein einfaches Fenster mit einer Ja-/Nein-Entscheidungsfrage. Dialog und Whiptail bieten über den Fenstertyp --yesno eine entsprechende Box an. Als Parameter geben Sie lediglich den Text der Fragen sowie Höhe und Breite der Box an (Listing 3). Das Ergebnis zeigt Abbildung 4. Für Whiptail funktioniert der Aufruf identisch, nur dass in diesem Fall der explizite Aufruf von clear entfallen kann. Ganz ähnlich funktioniert der Aufruf einer Box mit einer Mitteilung, die der Benutzer bestätigen muss (Listing 4).

Listing 3

#!/bin/bash
dialog --yesno "Lichtabsauger wirklich ausschalten?" 0 0
# Rückgabewert des letzten Kommandos einfangen
antwort=$?
# Bildschirm löschen
clear
# Auswertung
if [ $antwort = 0 ]
then
  echo "Auswahl: Ja"
else
  echo "Auswahl: Nein"
fi

Abbildung 4: Eine von Dialog erstellte Yesno-Box.

Abbildung 4: Eine von Dialog erstellte Yesno-Box.

Listing 4

#!/bin/bash
dialog --msgbox "Ihre Festplatte ist voll." 0 0
clear

Beide Aufruftypen zusammen lassen sich recht gut in einem Shellskript integrieren, wie Listing 5 demonstriert. Die entsprechende Bildschirmausgabe zeigt Abbildung 5.

Listing 5

#!/bin/bash
dialog --yesno "Lichtabsauger wirklich ausschalten?" 0 0
# Rückgabewert einfangen
antwort=$?
# Bildschirm löschen
dialog --clear
# Auswertung
if [ $antwort = 0 ]
then
  dialog --msgbox "Lichtabsauger wird ausgeschaltet." 6 40
else
  dialog --msgbox "Lichtabsauger läuft." 6 40
fi
clear

Benötigen Sie ein Hinweisfenster ohne explizite Bestätigung, setzen Sie dazu eine Infobox ein. Sie wartet nicht auf eine Reaktion des Benutzers, sondern zeigt lediglich die Information an. Das Skript läuft derweil im Hintergrund weiter:

dialog --infobox "Vorgang läuft ..." 0 0

Rufen Sie in diesem Fall statt Dialog Whiptail auf, nehmen Sie nur ein kurzes Flackern des Terminals wahr. Dabei handelt es sich nicht etwa um einen Fehler: Whiptail stellt die Infobox lediglich dar, hat aber keine weiteren Anweisungen auszuführen. Deshalb löscht es den Bildschirm wieder löscht und beendet sich.

Kalender, zum zweiten

Um die Kalenderauswahl aus Listing 2 in einer kleinen Box anzuzeigen, nutzen Sie die Menübox. Sie erwartet die einzelnen Menüpunkte als zusätzliche Parameter im Aufruf der Dialogbox. Das Aufrufschema lautet:

$ dialog --menu Ausgabekanal "Beschriftung" Höhe Breite Menühöhe Auswahlliste

Vor den Parametern für das eigentliche Menü gegen sie an, auf welchem Ausgabekanal die Auswahl erwartet wird. Hier ist das die Standardausgabe, im Aufruf lautet der Parameter also --stdout. Die Auswahlliste selbst besteht aus einzelnen Wertepaaren, die sich wiederum aus einem Index und einer Beschreibung zusammensetzen. Der erste Buchstabe des Index erscheint hervorgehoben und gestattet das Anspringen des jeweiligen Menüpunkts in der Liste, indem man die entsprechende Taste drückt.

Ist die Auswahlliste größer als die Anzahl der darzustellenden Menüpunkte, erscheint automatisch eine Prozentanzeige zur Orientierung innerhalb der Liste (Abbildung 6). Mit der Verwendung der Menübox verkürzt sich unser Kalender-Skript erheblich (Listing 6). Zeile 3 sieht auf den ersten Blick recht komplex aus, ist es aber in Wahrheit nicht.

Listing 6

#!/bin/bash
jahr="2010"
monat=`dialog --stdout --menu "Auswahl:" 0 0 0 "5" "Mai" "6" "Juni" "7" "Juli"`
clear
if [ $monat ]
then
    ncal $monat $jahr
fi

Abbildung 6: Die Kalenderauswahl, diesmal als Dialog-Box.

Abbildung 6: Die Kalenderauswahl, diesmal als Dialog-Box.

Puzzeln wir das Konstrukt doch mal etwas auseinander: Kurz gesagt, weisen wir der Variable monat das Ergebnis der Aktion auf der rechten Seite des Gleichheitszeichens zu. Bei der Aktion handelt es sich in diesem Fall um ein Dialog-Kommando, das in Backticks (“`“) eingeschlossen ist. Dadurch interpretiert die Bash alle Zeichen innerhalb der Backticks als Kommandozeilenbefehl und führt diesen vollständig in einer eigenen Umgebung (“Subshell”) aus. Den Rückgabewert des Kommandos übermittelt die Subshell an an den aufrufenden Prozess, der weist ihn letztendlich der Variable monat zu.

Beim Dialog-Kommando selbst handelt es sich um ein Menü (--menu), mit einer Überschrift für das Auswahlfeld und den drei Angaben für Fensterhöhe, Fensterbreite und Anzahl der sichtbaren Menüpunkte ("0"). Daran hängt eine Liste der einzelnen Menüpunkte, von denen jeder zwei Werte umfasst: Index und Text. Fällt die Länge von Index und Text größer aus als die angegebene Fensterbreite, schneidet Dialog den Text in der Darstellung schlicht ab.

Wählt der Benutzer in der Auswahlbox Abbrechen, erhält das Skript einen leeren Rückgabewert. Die Prüfung in Zeile 5 fällt daraufhin negativ aus, daher führt das Skript in diesem Fall die Anweisung in Zeile 7 nicht aus.

Falls Ihnen in der Dialogbox eine Liste mit Radiobuttons besser gefiele: Kein Problem, auch das beherrscht Dialog. Sie ändern dazu den Aufruf der Box in Zeile 3 von Listing 6 folgendermaßen ab:

monat=`dialog --stdout --radiolist "Auswahl:" 0 0 0 "Mai" "" off "Juni" "" off "Juli" "" off`

Wie Sie sehen, gilt es für die --radiolist jeden einzelnen Menüeintrag um einen dritten Wert zu ergänzen. Mit on ist der Menüpunkt ausgewählt, mit off ausgeschaltet. Es kann stets nur ein einziger Menüpunkt aus der Liste markiert sein.

Abbildung 7: Schick: Die Auswahl mit Radiobuttons.

Abbildung 7: Schick: Die Auswahl mit Radiobuttons.

Kalender erweitert

Für eine Liste mit der Möglichkeit zur Auswahl mehrerer Optionen gibt es die Checkliste (Abbildung 8). Dazu rufen Sie Dialog mit der Option --checklist auf, was etwas mehr Aufwand erfordert als bei den beiden vorigen Dialogtypen. Sie ersetzen die Zeile 3 von Listing 6 dabei durch das Konstrukt aus Listing 7.

Listing 7

monat=`dialog --stdout --checklist "Auswahl:" 0 0 3 Mai "" off Juni "" off Juli "" off | sed -n 's/\"//gp'`

Abbildung 8: Mehrfachauswahl in einer Checkliste mit Dialog.

Abbildung 8: Mehrfachauswahl in einer Checkliste mit Dialog.

Innerhalb der Backticks steht diesmal eine recht kompliziert aussehende Befehlsfolge. Sie wird deswegen notwendig, weil der Rückgabewert des Dialog-Aufrufs in diesem Fall Anführungszeichen enthält, die den ncal-Aufruf verwirren. Diese gilt es also geschickt zu löschen. Dabei hilft ein Aufruf des Streameditors sed, der alle im Variableninhalt vorkommenden Anführungszeichen vernichtet (oder exakt: alle Vorkommen durch “nichts” ersetzt). Sie senden dazu den Rückgabewert des Dialog-Aufrufs über eine Pipe (“|“) direkt als Eingabe an sed.

Da jetzt im Menü eine Mehrfachauswahl möglich ist, müssen Sie das auch in der Auswertung berücksichtigen. Dazu ersetzen Sie die einfache if-Abfrage ab Zeile 5 von Listing 6 durch die for-Schleife aus Listing 8. Sie prüft den Inhalt der Variable monat. Diese enthält alle ausgewählten Menüpunkte, durch Leerzeichen voneinander getrennt. Bei jedem Durchlauf entnimmt die Schleife nun den nächsten Wert aus monat und reicht diesen an das Programm ncal als Parameter weiter. Ncal zaubert dann das entsprechende Kalenderblatt auf die Konsole.

Listing 8

  ...05 for var in $monat06 do07  echo "Monat: $var"08  ncal $var $jahr09 done

Als weitere kleine Auswahlfenster offeriert Dialog beispielsweise Eingabeboxen für Text (--inputbox) und Passworte (--passwordbox). Zur Darstellung einer kompletten Textdatei setzen Sie die nützliche Option --textbox ein:

$ dialog --textbox /etc/passwd 10 60

Reicht die Höhe der Textbox nicht zur Darstellung der Datei aus, erlaubt Dialog das Scrollen des Inhalts nach oben oder unten mithilfe der Pfeiltasten (Abbildung 9), jedoch nicht das horizontale Verschieben nach rechts oder links. Whiptail dagegen gestattet kurioserweise überhaupt kein Scrolling: Es zeigt nur so viele Zeilen an, wie im Aufruf angegeben.

Abbildung 9: So stellt Dialog den Inhalt einer Datei in einer Textbox dar.

Abbildung 9: So stellt Dialog den Inhalt einer Datei in einer Textbox dar.

Komplexere Auswahlfenster

Dialog bringt von Haus aus auch komplexere Dialogboxen mit, darunter einen Kalender, eine Dateiauswahl sowie einen kleinen Texteditor. Der Aufruf

$ dialog --calendar Kalenderblatt 0 0 1 7 2010

zaubert einen Kalender auf das Terminal. Die Überschrift das Fenster entnimmt Dialog der Option --calendar – hier lautet Sie einfach “Kalenderblatt”. Das anzuzeigende Datum stellen Sie mit den letzten drei Parametern ein – zuerst der Tag ("1"), danach der Monat ("7") und am Schluss das Jahr ("2010") für den 1. Juli 2010 (Abbildung 10).

Abbildung 10: Der Dialog-Kalender mit ausgewähltem Datum.

Abbildung 10: Der Dialog-Kalender mit ausgewähltem Datum.

Mit den Pfeiltasten bewegen Sie sich tage- und wochenweise vorwärts und rückwärts durch den Kalender, analog funktioniert das auch mit den Tasten [+] und [-]. Mit dem Tabulator wechseln Sie in das Feld für den Monat und das Jahr. Auch hier blättern Sie mithilfe der Pfeiltasten sowie von [+] und [-].

Das Ergebnis der Auswahl liefert Dialog in der Voreinstellung in der angelsächsischen Form Monat/Tag/Jahr zurück. Mit der Option --date-format stellen Sie die Formatangabe auf die gewünschte Reihenfolge ein. Die Formatangabe erfolgt hierbei analog zur C-Funktion strftime(). Für eine Ausgabe entsprechend den im deutschen Sprachraum üblichen Form Tag.Monat.Jahr sieht der Aufruf folgendermaßen aus:

$ dialog --date-format %d.%m.%Y --calendar Kalenderblatt 0 0 1 7 2010

Dialog gibt das Jahr hier vierstellig aus, für nur zwei Ziffern ersetzen Sie %Y durch %y. Weitere Optionen liefern der Aufruf man strftime oder ein Standardbuch für die Programmiersprache C/C++.

Zur Darstellung von Datei- und Verzeichnislisten stehen die beiden Optionen --fselect und --dselect zur Verfügung. Beide erwarten die Angabe eines Verzeichnisses, aus dem Sie dann eine Datei oder ein Unterordner ausgewählten können (Abbildung 11).

Abbildung 11: Die Dateiauswahlbox in Dialog.

Abbildung 11: Die Dateiauswahlbox in Dialog.

Den bereits erwähnten kleinen Texteditor (Abbildung 12) rufen Sie mittels der Option --editbox auf:

$ dialog --editbox /home/tux/beispiel.txt 0 0

Dieser Aufruf öffnet die Datei /home/tux/beispiel.txt im Editor. Mit den Pfeiltasten wählen Sie die gewünschte Zeile aus und bearbeiten diese je nach Bedarf.

Abbildung 12: Ein kleiner Texteditor als komplettes Dialog-Widget.

Abbildung 12: Ein kleiner Texteditor als komplettes Dialog-Widget.

In Whiptail suchen Sie die vorgestellten Optionen übrigens vergeblich: Es implementiert solche komplexeren Auswahlfenster bislang noch nicht.

Zusatzoptionen

Sowohl Dialog als auch Whiptail lassen sich über eine Unmenge von Optionen steuern – eine genaue Übersicht geben die jeweiligen Manpages sowie Webseiten ([5],[6]) und Fachliteratur [7] zum Thema.

Möchten Sie eine Dialogbox mit einem Hintergrundtext versehen, bietet Dialog dazu die Option --backtitle an. Der folgender Aufruf zaubert zu unserem Kalender die Überschrift “Monatsübersicht” auf einem blauen Hintergrund in das Terminal (Abbildung 13):

$ dialog --backtitle Monatsübersicht --calendar Test 0 0 1 7 2010
Abbildung 13: Ein Dialog-Kalender mit Hintergrundtext.

Abbildung 13: Ein Dialog-Kalender mit Hintergrundtext.

Im Aufruf müssen Sie den --backtitle zwingend vor der gewünschten Dialogbox angeben, anderenfalls ignoriert Dialog den Wunsch nach einer Überschrift. Eine Möglichkeit, den Hintergrund in einer anderen Farbe als blau einzufärben, bietet Dialog nicht an.

Möchten Sie explizit einen kleinen Scrollbalken in einer Auswahlbox anzeigen, realisieren Sie das mittels der Option --scrollbar. Im Beispiel aus Listing 6 könnte Zeile 3 dann beispielsweise so lauten:

monat=`dialog --stdout --scrollbar --menu "Auswahl:" 0 0 2 "5" "Mai" "6" "Juni" "7" "Juli"`

Dialog zeigt den Scrollbalken nur dann an, wenn Sie die Anzahl der Menüpunkte explizit angeben und nicht dynamisch berechnen lassen. Dazu müssen Sie --menu an der entsprechenden Stelle einen festen Wert größer Null übergeben. Im Beispiel der obigen Codezeile sind stets zwei Einträge im Menü sichtbar (“0 0 2“).

Fazit

Mit Dialog und Whiptail werten Sie Bash-Skripte schnell und unkompliziert mit einer textbasierten Benutzeroberfläche auf. Dazu nutzen die kleinen Tools die Dienste der stabilen und leistungsfähige Standardbibliotheken Ncurses beziehungsweise Newt. Wie Sie solche Fenster auch in höheren Programmiersprachen erzeugen, zeigt Teil 2 dieses Artikels in der nächsten Ausgabe.

TIPP

Auch für GUIs wie KDE und Gnome gibt es Werkzeuge, die ähnlich wie Dialog und Whiptail Shellskripts mit Fenstern und Dialogen aufwerten – in diesem Fall auf der grafischen Oberfläche. Eine Einführung in die Fähigkeiten von KDialog und Zenity bietet ein Artikel aus LinuxUser 06/2008 [8].

Infos

[1] Ncurses (Wikipedia): http://en.wikipedia.org/wiki/Ncurses

[2] CDK: http://invisible-island.net/cdk/cdk.html

[3] CDK (Wikipedia): http://en.wikipedia.org/wiki/CDK_%28programming_library%29

[4] Newt (Wikipedia): http://en.wikipedia.org/wiki/Newt_%28programming_library%29

[5] Dialog-Tutorial: http://www.cc-c.de/german/linux/linux-dialog.php

[6] Whiptail-Beispiele: http://en.wikibooks.org/wiki/Bash_Shell_Scripting#Using_whiptail

[7] Bash-Skripte: Jürgen Wolf, “Shell-Programmierung – das umfassende Handbuch”, Galileo Computing, ISBN 978-3-8362-1650-0, http://tinyurl.com/lu1009-shell

[8] KDialog und Zenity: Kristian Kißling, “Klacker, Klacker, Klick, Klick”, LU 06/2008, S. 36, https://www.linux-community.de/artikel/15704

Der Autor

Frank Hofmann hat Informatik an der Technischen Universität Chemnitz studiert. Derzeit arbeitet er in Berlin im Büro 2.0, einem Open-Source-Expertennetzwerk, als Dienstleister mit Spezialisierung auf Druck und Satz. Er gehört zum Vorstand der Linux-Usergroup Potsdam.

LinuxUser 09/2010 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben