Dialog
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.