dialog: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
<b>Dialog</b> ist eine in [[Shellskript]]en verwendete Anwendung, welche | <b>Dialog</b> ist eine in [[Shellskript]]en 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 <i>Optionen</i> <i>Fensterdetails</i> | |||
Der Aufbau der Fensterdetails folgt dem Schema | |||
<i>Fenstertyp "Titel" Breite Höhe</i> | |||
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 <i>Ausgabekanal "Beschriftung" Höhe Breite Menühöhe Auswahlliste</i> | |||
== Verwendung == | |||
Einfache Hinweisbox. | |||
{| class=wikitable width=100% | |||
| | |||
<source lang=bash enclose=div> | |||
#!/bin/bash | |||
dialog --msgbox "Schwachsinn naht." 0 0 | |||
clear | |||
</source> | |||
|} | |||
Einfaches Fenster mit einer Ja/Nein-Entscheidungsfrage. | |||
{| class=wikitable width=100% | |||
| | |||
<source lang=bash enclose=div> | |||
#!/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 | |||
</source> | |||
|} | |||
Infobox, die keine Reaktion des Benutzers erforderlich macht. Ein allfälliges Skript läuft dabei im Hintergrund weiter. | |||
{| class=wikitable width=100% | |||
| | |||
<source lang=bash enclose=div> | |||
#!/bin/bash | |||
dialog --infobox "Vorgang läuft..." 0 0 | |||
sleep 5 | |||
clear | |||
</source> | |||
|} | |||
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. | |||
{| class=wikitable width=100% | |||
| | |||
<source lang=bash enclose=div> | |||
#!/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 | |||
</source> | |||
|} | |||
Menübox mit Radioknöpfen. Mit "on" sind die jeweiligen Menüpunkte ausgewählt, mit "off" ausgeschaltet. | |||
{| class=wikitable width=100% | |||
| | |||
<source lang=bash enclose=div> | |||
#!/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 | |||
</source> | |||
|} | |||
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. | |||
{| class=wikitable width=100% | |||
| | |||
<source lang=bash enclose=div> | |||
#!/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 | |||
</source> | |||
|} | |||
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. | |||
{| class=wikitable width=100% | |||
| | |||
<source lang=bash enclose=div> | |||
#!/bin/bash | |||
dialog --textbox /etc/passwd 15 60 | |||
clear | |||
</source> | |||
|} | |||
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". <font color=red>Die Option "--date-format" war unter dem von mir eingesetzten dialog 0.9a unter Ubuntu 10.04 nicht vorhanden.</font> | |||
{| class=wikitable width=100% | |||
| | |||
<source lang=bash enclose=div> | |||
#!/bin/bash | |||
dialog --date-format %d.%m.%Y --calendar Kalenderblatt 0 0 1 7 2010 | |||
clear | |||
</source> | |||
|} | |||
Kalender mit Hintergrundtext. | |||
{| class=wikitable width=100% | |||
| | |||
<source lang=bash enclose=div> | |||
#!/bin/bash | |||
dialog --backtitle Monatsübersicht --calendar Test 0 0 10 8 2010 | |||
clear | |||
</source> | |||
|} | |||
== Weblinks == | |||
{{Weblinks}} | {{Weblinks}} | ||
{{url_dewikipedia|Dialog_(software)|Dialog (software)}} | {{url_dewikipedia|Dialog_(software)|Dialog (software)}} | ||
{{url|DE|Linux User|ger|http://www.linux-user.de/ausgabe/2001/11/078-ootb/dialog-4.html|dialog}} | {{url|DE|Linux User|ger|http://www.linux-user.de/ausgabe/2001/11/078-ootb/dialog-4.html|dialog}} | ||
{{url|DE|Bernd Holzhauer|ger|http://www.cc-c.de/german/linux/linux-dialog.php|Dialog : Utility für interaktive Shell Skripte}} | |||
{{Fuss}} | {{Fuss}} | ||
Aktuelle Version vom 2. November 2010, 22:31 Uhr
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 |