dialog

Aus Mikiwiki
Version vom 3. November 2010, 00:31 Uhr von Michi (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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
country DE.gif Wikipedia ger Dialog (software)wbm Enzyklopädischer Artikel
country DE.gif Linux User ger dialogwbm
country DE.gif Bernd Holzhauer ger Dialog : Utility für interaktive Shell Skriptewbm