Dialog

De Wiki doc

Révision datée du 15 novembre 2017 à 11:20 par Ycharbi (discussion | contributions) (Page créée avec « Category: Shell [https://en.wikipedia.org/wiki/Dialog_(software) Dialog] est un utilitaire [https://fr.wikipedia.org/wiki/Ncurses ncurses] permettant de recueillir des... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

Dialog est un utilitaire ncurses permettant de recueillir des choix utilisateurs afin de créer des menus interactifs pour des programmes. Vous l'avez forcément déjà croisé ne serai-ce que lorsque vous avez installé Debian puisque qu'il l'utilise pour le choix des paquets à installer.

Installation

apt install dialog

Usage

Dialog renvoi un code retour en fonction du choix de l'utilisateur. Dans le cas d'un booléen, il renvoi 0 si la réponse est oui et 1 si la réponse est non. Dans le cas d'une liste de choix, il renvoi le numéro de la ligne du choix.

Types de boites

Cet outil propose différents types d’interactions avec l'utilisateur allants du simple message à afficher jusqu'aux choix multiple sous forme de cases à cocher.

Message à afficher

dialog --title 'Votre titre' --msgbox 'Votre superbe message.' 5 30

Les nombres à la fin de la ligne sont les dimensions de la boite. Le 5 est le nombre de lignes verticales tandis que le 30 décrit le nombre de lignes horizontales.

Message temporaire

Il est possible d'afficher un texte de façon temporaire.

dialog --infobox "Merci de bien vouloir patienter." 10 30 ; sleep 4

Affichage d'un fichier

L'affichage d'un fichier sous forme de pager se fait de cette manière:

dialog --textbox /etc/profile 22 70

Il est alors possible de faire défiler le fichier avec les flèches du clavier.

Question booléenne

dialog --title "Votre titre"  --yesno "Êtes-vous d'accord ?" 6 25

Le code retour contenu dans $? contiendra 0 ou 1 si oui oui si non.

Menu à choix unique

Cette option présente un menu offrant le choix entre un certain nombre de possibilités. L'utilisateur ne peut choisir qu'un seul élément, la valeur retourné dans ce cas est un entier égale au numéro de la ligne du choix sélectionné contenu dans la variable exécutant la commande.

Version compacte

exec 3>&1;
choixmodele=$(dialog --menu "Choisir un modèle à installer :" 20 40 3 1 Serveur\ IPSec 2 Serveur\ IPSec\ avec\ wireshark 3 Système\ de\ base 2>&1 1>&3);
exec 3>&-;

Version étendue

&1;
choixmodele=$(dialog --menu "Choisir un modèle à installer :" 20 40 3 \
	1 Serveur\ IPSec \
	2 Serveur\ IPSec\ avec\ wireshark \
	3 Système\ de\ base 2>&1 1>&3);
exec 3>&-;

Champ de formulaire

exec 3>&1;
nom=$(dialog --inputbox "Enter your name:" 8 40 2>&1 1>&3);                     
exec 3>&-;

La valeur de retour ce trouve dans la variable $nom.

Les deux exec avec les redirections de partout dans ces trois lignes sont un mystère expliqué dans le Guide avancé du langage Bash. Pour le coup je n'ai pas d’intérêt à comprendre ce truck, un bête copier/collé fait l'affaire...

Cases à cocher

Version compacte

exec 3>&1;
choix=$(dialog --checklist "Quels capacité voulez-vous ?:" 10 40 3 1 Serveur off\ web 2 Base\ de\ donnée off 3 Serveur\ de\ fichiers off 2>&1 1>&3);
exec 3>&-;

Version étendue

exec 3>&1;
choix=$(dialog --checklist "Quels capacité voulez-vous ?:" 10 40 3 \
	1 Serveur\ web off \
	2 Base\ de\ donnée off \
	3 Serveur\ de\ fichiers off 2>&1 1>&3);
exec 3>&-;

Le off à la fin peut être remplacé par on afin de pré-coché la case.

Liste à puce

Version compacte

exec 3>&1;
choix=$(dialog --backtitle "Sélection de service" --radiolist "Quelles capacité voulez-vous ?:" 10 40 3 1 Serveur\ web on 2 Base\ de\ donnée off 3 Serveur\ de\ fichiers off 2>&1 1>&3);
exec 3>&-;

Version étendue

exec 3>&1;
choix=$(dialog --backtitle "Sélection de service" --radiolist "Quelles capacité voulez-vous ?:" 10 40 3 \
	1 Serveur\ web on \
	2 Base\ de\ donnée off \
	3 Serveur\ de\ fichiers off 2>&1 1>&3);
exec 3>&-;

Utilisation concrète

Je me suis servis de dialog dans mon article sur systemd. Cela peut vous donner une idée sur l'utilisation concrète de cet outil.

Sources