Dialog
Aus Ubuntu-Forum Wiki
Robin2 (Diskussion | Beiträge) |
Robin2 (Diskussion | Beiträge) |
||
Zeile 55: | Zeile 55: | ||
Die nächste Zeile gibt diese Variable mit einer Messagebox aus, wobei \n jeweils für eine neue Zeile steht. | Die nächste Zeile gibt diese Variable mit einer Messagebox aus, wobei \n jeweils für eine neue Zeile steht. | ||
== Menü == | == Menü == | ||
- | + | Mithilfe von Dialog, kann man auch ein Menü erzeugen aus welchem man über die Pfeiltasten einen Eintrag auswählen kann: | |
<source lang="bash"> | <source lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
Zeile 66: | Zeile 66: | ||
dialog --msgbox "Sie haben $Eingabe gewählt" 0 0 | dialog --msgbox "Sie haben $Eingabe gewählt" 0 0 | ||
</source> | </source> | ||
+ | Das folgende Beispiel lässt den Benutzer aus einem Menü einen Texteditor wählen. Der Name des Texteditors wird nachher in eine Datei geschrieben, mit ''cat'' eingelesen, in der Variablen ''Eingabe'' gespeichert und mit Hilfe einer ''Messagebox'' ausgegeben. | ||
+ | |||
+ | Wir wollen uns nun die Syntax von ''dialog --menu'' anschauen. Zunächst folgt auf ''--menu'' ein String, welcher ausgegeben werden soll. Hinter diesem String steht die Höhe der Box, dann folgt die Breite und schließlich die Höhe des Menüs. Erst dann folgen die Menüeinträge, welche aus zwei Parametern bestehen: | ||
+ | *Den ''Namen'' des Eintrags, der sowohl angezeigt, wie auch später mit ''2>'' in eine Datei geschrieben wird | ||
+ | *Eine ''Beschreibung'' des Eintrags, die nur angezeigt wird. | ||
+ | Im Gegensatz zur Beschreibung ist der Name des Eintrags ''kein'' String und darf daher auch nicht in Anführungszeichen gesetzt werden. Zudem müssten eigentlich alle an Dialog zu übergebenden Parameter in einer Zeile stehen und dürften nicht mit einem Umbruch abgebrochen werden. Um den Code jedoch noch lesbar zu halten, kann man der Shell mit einem an das Zeilenende gehängten Backslash mitteilen, dass der Zeilenumbruch nicht zu beachten ist , sondern der Code einfach so ausgeführt werden soll, als stünde er in einer Zeile. | ||
+ | |||
+ | = Links = | ||
+ | [http://hightek.org/dialog/ Offizielle Seite von Dialog] |
Version vom 3. Juli 2009, 22:40 Uhr
Dieser Artikel wird gerade neu erstellt und ist noch nicht vollständig. |
Der Inhalt dieses Artikels unterlag noch keiner Revision. Er kann geeignet sein, ein System zu beschädigen oder zu zerstören. Die Anleitungen sollten noch nicht genutzt werden. |
Dieser Artikel setzt Grundkenntnisse in der Entwicklung von BASH-Scripten voraus |
Inhaltsverzeichnis |
1 Allgemeines
Dialog ist ein auf ncurses basierendes Programm, welches es ermöglicht in einem Shell-Script auf einfache Art und Weise ein "grafische"-Benutzeroberfläche zu erstellen. Ähnliche Programme sind Dialog sind Zenity oder KDialog, welche aber den Nachteil haben, dass sie einen XServer benötigen.
2 Installation
Dialog ist in den Paketquellen von Ubuntu vorhanden und kann über den Befehl
sudo apt-get install dialog
installiert werden.
3 Benutzung
3.1 Hello World
Dialog wird mit dem Befehl dialog aufgerufen, danach folgen Argumente, welche beschreiben, wie die Benutzeroberfläche letztendlich aussehen aussehen soll. Dies soll nun an einem einfachen Hello World-Programm demonstriert werden:
dialog --msgbox 'Hello World' 5 20
Mithilfen von --msgbox wird dialog mitgeteilt, dass es eine einfache Nachricht in einem Fenster anzeigen soll. Danach folgt ein String (Zeichenkette), welcher angibt, wie der Inhalt der Nachricht lautet, in diesem Fall ein einfaches Hello World. Die beiden Zahlen hinter dem String geben die Größe des Fensters an (Zuerst folgt die Höhe, danach die Breite).
3.2 Einfache Dialogboxen
Nun haben wir schon einen kleinen Einblick in die Syntax von Dialog bekommen, Dialog kann aber noch viel mehr als einfach Meldungen in Fenstern auszugeben. Im folgenden werden wir lernen, wie man über Dialog eine Interaktion mit dem Benutzer erreichen kann. Dazu werden werden wir ein kleines Bash-Script schreiben, dass den Benutzer fragt, ob es ihm gut geht:
#!/bin/bash dialog --backtitle "Interagierendes Dialogprogram" --yesno "Geht es dir gut?" 0 0 if [ $? -eq 0 ]; then dialog --msgbox "Das freut mich!" 0 0 else dialog --msgbox "Das tut mir aber leid!" 0 0 fi
Dieses Programm fragt den Benutzer, ob es ihm gut geht, und teilt dem Benutzer je nach antwort entweder mit, dass es sich freue, oder, dass es ihm leid tue. Wie man sieht, tauchen hier einige neue Funktionen von Dialog auf, welche wir näher betrachten wollen:
dialog --backtitle "Interagierendes Dialogprogram" --yesno "Geht es dir gut?" 0 0
In dieser Zeile fällt als erstes das Argument --backtitle auf, welches die Funktion hat, den nachfolgenden String als Überschrift über dem Fenster anzuzeigen. Dazu passend, existiert es auch das Argument --title, welches eine Überschrift in das Fenster zeichnet.
Auf dieses Argument hin folgt der Parameter --yesno (Yes/No). Dieser Parameter hat die Funktion eine Dialogbox anzuzeigen, welche zwei Button hat, einen Ja und einen Nein Button. Wie bei der --msgbox gibt es auch hier einen String, der den auszugebenden Text anzeigt und zwei Integer (Ganzzahlen), welche die Höhe und die Breite der Dialogbox angeben. Einem aufmerksamen Leser sollte nun aufgefallen seien, das sowohl Höhe als auch Breite der Box auf 0 steht. Das hat die Folge, das die Größe der Box sich automatisch an die Länge des Textes anpasst.
Nun stellt sich natürlich die Frage auf, wie man nun letztendlich herausfindet, welcher der Button schließlich gedrückt wurde? Dazu benutzt man die Umgebungsvariable, $?, in welcher der Wert gespeichert ist, der vom letzten Befehl mit exit zurückgegeben wurde. In diesem Fall wäre das 0 für Ja und 1 für Nein. Diesen Wert kann man nun mit einer normalen IF-Anweisung auswerten.
3.3 Benutzereingaben
Müssen komplexe Benutzereingaben ausgewertet werden, kann man jedoch mit $? nichts anfangen. Stattdessen muss man die Eingabe zunächst in eine Datei geschrieben werden:
#!/bin/bash dialog --inputbox 'Geben Sie etwas ein!' 0 0 2> dialog.tmp Eingabe=`cat dialog.tmp` dialog --msgbox "Du hast eingegeben: \n \n $Eingabe" 0 0
In diesem Beispiel wird zunächst mit
dialog --inputbox 'Geben Sie etwas ein!' 0 0
Ein einfaches Feld für die Texteingabe erzeugt. Mit
[..] 2> dialog.tmp
wird die Eingabe in eine Datei namens dialog.tmp geschrieben, deren Inhalt später mit
Eingabe=`cat dialog.tmp`
cat eingelesen und in der Variable Eingabe gespeichert wird.
dialog --msgbox "Du hast eingegeben: \n \n $Eingabe" 0 0
Die nächste Zeile gibt diese Variable mit einer Messagebox aus, wobei \n jeweils für eine neue Zeile steht.
3.4 Menü
Mithilfe von Dialog, kann man auch ein Menü erzeugen aus welchem man über die Pfeiltasten einen Eintrag auswählen kann:
#!/bin/bash dialog --menu "Wähle einen Texteditor" 15 60 10\ Emacs "Ein sehr mächtiger Texteditor"\ vi "Ein sehr mächtiger Texteditor für das Terminal"\ Gedit "Standard-Editor von Gnome"\ Kile "Standard-Editor von KDE" 2>dialog.tmp Eingabe=`cat dialog.tmp` dialog --msgbox "Sie haben $Eingabe gewählt" 0 0
Das folgende Beispiel lässt den Benutzer aus einem Menü einen Texteditor wählen. Der Name des Texteditors wird nachher in eine Datei geschrieben, mit cat eingelesen, in der Variablen Eingabe gespeichert und mit Hilfe einer Messagebox ausgegeben.
Wir wollen uns nun die Syntax von dialog --menu anschauen. Zunächst folgt auf --menu ein String, welcher ausgegeben werden soll. Hinter diesem String steht die Höhe der Box, dann folgt die Breite und schließlich die Höhe des Menüs. Erst dann folgen die Menüeinträge, welche aus zwei Parametern bestehen:
- Den Namen des Eintrags, der sowohl angezeigt, wie auch später mit 2> in eine Datei geschrieben wird
- Eine Beschreibung des Eintrags, die nur angezeigt wird.
Im Gegensatz zur Beschreibung ist der Name des Eintrags kein String und darf daher auch nicht in Anführungszeichen gesetzt werden. Zudem müssten eigentlich alle an Dialog zu übergebenden Parameter in einer Zeile stehen und dürften nicht mit einem Umbruch abgebrochen werden. Um den Code jedoch noch lesbar zu halten, kann man der Shell mit einem an das Zeilenende gehängten Backslash mitteilen, dass der Zeilenumbruch nicht zu beachten ist , sondern der Code einfach so ausgeführt werden soll, als stünde er in einer Zeile.