dialog: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
<b>Dialog</b> ist eine in [[Shellskript]]en verwendete Anwendung, welche textbasierte Benutzerschnittstellen-Widgets anzeigt. Es verwendet die Bibliothek [[Curses]] oder [[Ncurses]], letztere ermöglicht dem Benutzer die Verwendung der [[Maus]] in einem Terminalfenster.
<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 ==


{{dewi|Dialog_(software)|Dialog (software)}}
{{Weblinks}}
* [http://www.linux-user.de/ausgabe/2001/11/078-ootb/dialog-4.html dialog] (Linux-User.de)
{{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|Bernd Holzhauer|ger|http://www.cc-c.de/german/linux/linux-dialog.php|Dialog : Utility für interaktive Shell Skripte}}
{{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