dialog
Dialog ist eine in Shellskripten verwendete Anwendung, welche zeichenorientierte Benutzerschnittstellen-Widgets anzeigt. Es verwendet die Bibliothek Curses oder Ncurses, letztere ermöglicht dem Benutzer die Verwendung der Maus in einem Terminalfenster.
Konzept
Inhalt und Aussehen der Dialogboxen lassen sich über Parameter und die Standardeingabe steuern. Vom Benutzer ausgewählte Menüpunkte, Eingabewerte und auftretende Fehlercodes werden über die Stafndardausgabe und durch den Rückgabewert des Aufrufs übermittelt; Rückmeldungen lassen sich also direkt im aufrufenden Skript weiterverarbeiten.
Unter anderem stehen folgende Fenstertypen zur Verfügung:
- einfache Hinweisbox
- Fenster mit einer Entscheidungsfrage
- Fenster mit einer Eingabezeile
- Eingabebox für Text ("--inputbox")
- Eingabebox für Passworte ("--passwordbox")
- Darstellung von Dateilisten ("--fselect")
- Darstellung von Verzeichnislisten ("--dselect")
- Texteditor ("--editbox")
Jedes Fenster kann in der Kopfzeile einen Titel tragen. Es kann keine andere Fareb als die vorgegebene (blau) als Hintergrund eingestellt werden.
Syntax
dialog Optionen Fensterdetails
Der Aufbau der Fensterdetails folgt dem Schema
Fenstertyp "Titel" Breite Höhe
Breite und Höhe werden mit der Anzahl Zeichen angegeben (und nicht in Pixeln). Werden beide Parameter mit dem Wert 0 belegt, so belegt die Box automatisch nur das zur Darstellung notwendige Minimum an Platz auf dem Bildschirm.
Das Aufrufschema für eine Menübox sieht wie folgt aus:
--menu Ausgabekanal "Beschriftung" Höhe Breite Menühöhe Auswahlliste
Verwendung
Einfache Hinweisbox.
#!/bin/bash
dialog --msgbox "Schwachsinn naht." 0 0
clear
|
Einfaches Fenster mit einer Ja/Nein-Entscheidungsfrage.
#!/bin/bash
dialog --yesno "Soll hier Schwachsinn verbreitet werden?" 0 0
antwort=$?
dialog --clear
if [ $antwort = 0 ]
then
dialog --msgbox "Der Schwachsinn breitet sich aus." 6 40
else
dialog --msgbox "Schwachsinn wird eingestellt." 6 40
fi
clear
|
Infobox, die keine Reaktion des Benutzers erforderlich macht. Ein allfälliges Skript läuft dabei im Hintergrund weiter.
#!/bin/bash
dialog --infobox "Vorgang läuft..." 0 0
sleep 5
clear
|
Menübox mit Ausgabe auf die Standardausgabe ("--stdout"), einer Überschrift für das Auswahlfeld ("Auswahl:"), Fensterhöhe ("0"), Fensterbreite ("0") und Anzahl der sichtbaren Menüpunkte ("2"). Die eigentliche Auswahlliste besteht aus Wertepaaren, die wiederum aus Index und Beschreibung bestehen (beispielsweise "6" und "Juni") - der erste Buchstabe des Index erscheint dabei hervorgehoben und kann direkt über die jeweilige Taste auf der Tastatur angewählt werden. Ist die Länge von Index und Text grösser als die angegebene Fensterbreite, so wird der Text in der Darstellung einfach angeschnitten.
#!/bin/bash
jahr="2010"
monat=$(dialog --stdout --menu "Auswahl:" 0 0 2 "5" "Mai" "6" "Juni" "7" "Juli")
clear
if [ ${monat} ]; then
ncal ${monat} ${jahr}
fi
|
Menübox mit Radioknöpfen. Mit "on" sind die jeweiligen Menüpunkte ausgewählt, mit "off" ausgeschaltet.
#!/bin/bash
jahr="2010"
monat=$(dialog --stdout --radiolist "Auswahl:" 0 0 0 "Mai" "" off "Juni" "" off "Juli" "" off)
clear
if [ ${monat} ]; then
ncal ${monat} ${jahr}
fi
|
Menübox als Checkliste für die Mehrfachauswahl. Der Rückgabewert des Dialogaufrufs enthält hier Anführungszeichen, die den Aufruf von "ncal" verwirren; um dies zu vermeiden, werden sie mit "sed" gelöscht.
#!/bin/bash
jahr="2010"
monat=$(dialog --stdout --checklist "Auswahl:" 0 0 3 "Mai" "" off "Juni" "" off "Juli" "" off | sed -n 's/\"//gp')
clear
for var in ${monat}
do
echo "Monat: ${var}"
ncal ${var} ${jahr}
done
|
Textdatei. Reicht die Höhe der Textbox nicht zur Darstellung der Datei aus, so kann mit Hilfe der Pfeiltasten (bzw. "+" und "-") nach oben oder unten gerollt werden.
#!/bin/bash
dialog --textbox /etc/passwd 15 60
clear
|
Kalender. Das anzuzeigende Datum wird mit drei Parametern angegeben ("1", "7" und "2010" für den 1. Juli 2010). Das Ergebnis wird standardmässig im Format "Monat/Tag/Jahr" zurückgegeben, kann aber mit Hilfe der Option "--date-format" verändert werden; weitere Optionen dazu liefert die Ausgabe von "man strftime". Die Option "--date-format" war unter dem von mir eingesetzten dialog 0.9a unter Ubuntu 10.04 nicht vorhanden.
#!/bin/bash
dialog --date-format %d.%m.%Y --calendar Kalenderblatt 0 0 1 7 2010
clear
|
Kalender mit Hintergrundtext.
#!/bin/bash
dialog --backtitle Monatsübersicht --calendar Test 0 0 10 8 2010
clear
|
Weblinks
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|
Wikipedia | ger | Dialog (software)wbm | Enzyklopädischer Artikel |
Linux User | ger | dialogwbm | |
Bernd Holzhauer | ger | Dialog : Utility für interaktive Shell Skriptewbm |