Comment utiliser les widgets ncurses dans des scripts shell sur Linux

Comment utiliser les widgets ncurses dans des scripts shell sur Linux

Dans ce tutoriel, nous apprendrons les bases du utilitaire de dialogue, pour utiliser ncurses widget dans nos scripts de coquille. Nous verrons comment installer la boîte de dialogue dans les distributions Linux les plus utilisées, certaines des options courantes que nous pouvons utiliser pour modifier le comportement de la boîte de dialogue, comment utiliser certains widgets; Parmi les autres: zone de saisie, liste de contrôle, radioliste et Oui Non. Enfin, nous verrons comment utiliser les données obtenues par le traitement du widget.

Dans ce tutoriel, vous apprendrez:

  • Comment installer l'utilitaire de dialogue sur Linux
  • Quelles sont les options de dialogue les plus pertinentes
  • Comment utiliser les widgets InputBox, Checklist, Radiolist, PasswordBox, MSBox, Calendar et Yesno
  • Comment gérer les données dérivées du traitement du widget


Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant de la distribution
Logiciel L'utilitaire de dialogue est nécessaire pour suivre ce tutoriel
Autre Familiarité avec l'interface de la ligne de commande et les redirections de coquille
Conventions # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Installation sur Linux

Le dialogue L'utilitaire est disponible dans tous les principaux référentiels par défaut de distribution Linux, nous pouvons donc utiliser notre gestionnaire de packages préféré pour l'installer. Si nous utilisons Fedora, par exemple, nous pouvons courir:



$ sudo dnf installer la boîte de dialogue

Sur Debian, nous pouvons courir:

$ sudo apt-get l'installation de dialogue

Le dialogue L'utilité est également contenue dans le référentiel de noyau Archlinux, nous pouvons donc l'installer via Pac-Man:

$ sudo pacman -s dialogue

Les commandes d'installation s'appliquent également aux dérivés des distributions mentionnées ci-dessus.

Options de dialogue communes

Nous appelons ces options «communes» car elles peuvent être utilisées indépendamment du type de widget que nous voulons utiliser. Ici, nous verrons juste certains d'entre eux, ceux qui peuvent être d'un intérêt immédiat lorsque nous commencerons à utiliser dialogue.

Paramètres A Titre de la boîte de widget: L'option -title

En utilisant le --titre Option Nous pouvons spécifier une chaîne qui sera utilisée comme titre de widget; il sera affiché en haut de la boîte. Voici un exemple:

$ Docut

Voici ce qui est affiché à la suite de la commande ci-dessus:





Combinaison des widgets: l'option -and-widget:

Le --et Widget L'option peut être utilisée pour «chaîner» plus de widgets, de sorte qu'après avoir utilisé le premier, nous sommes immédiatement invités avec le second. La chaîne est arrêtée lorsque l'une des boîtes de dialogue renvoie un statut d'existence non nul. Un exemple de son utilisation est:

$ Dialog \ - Intuputbox "Entrez votre nom:" 0 0 \ - et-widget - Inputbox "Entrez votre âge:" 0 0

Une fois que nous avons lancé la commande ci-dessus, le premier widget d'entrée utilisé pour nous inviter à notre nom sera affiché. Une fois que nous avons confirmé l'entrée en cliquant sur le D'ACCORD bouton, le prochain widget sera affiché, et nous serons invités à saisir notre âge.

Effacer l'écran avec l'option -Clear

Lorsque nous utilisons le --et Widget Option Le contenu créé par un widget remplace celui produit par le précédent. Si les widgets n'occupent pas exactement le même espace d'écran, les deux contenus seraient mitigés, et cela créerait un gâchis.

Pour éviter les contenus qui se chevauchent, nous pouvons utiliser le --clair option; Lorsque nous le faisons, le contenu d'un widget est effacé avant que le widget suivant ne soit affiché: seule la couleur d'arrière-plan est conservée.

Définition du bouton A comme survu par défaut: l'option -default-Button

Selon le widget que nous utilisons, plus d'un bouton peut être affiché à l'écran et par défaut, l'un d'eux est mis en surbrillance par défaut, déterminant l'action par défaut à effectuer lorsque l'utilisateur appuie sur Entrée.

Nous pouvons remplacer le
par défaut du widget en utilisant le --bouton par défaut option suivie du nom du bouton, un parmi d'accord, Oui, Annuler, Non, aider ou supplémentaire.



Cette option peut être vraiment utile, par exemple, lors de l'incitation à la confirmation avant d'exécuter un potentiellement
Action dangereuse:

$ Dialog - Decault-Button "NON" - INPUTBOX "Entrez votre nom:" 0 0


Comme vous pouvez le voir sur la capture d'écran, nous avons fait pour que le bouton «non» soit sélectionné par défaut, afin que l'utilisateur sélectionne explicitement «oui» pour confirmer son choix.

Définition de l'élément sélectionné par défaut dans une liste avec -default-item

Lorsque nous utilisons une liste de contrôle ou un widget de menu, le premier élément de la liste des choix possibles est sélectionné par défaut. En utilisant le --item par défaut Option et référence à un élément, nous pouvons l'utiliser comme par défaut alternatif:

$ dialogue - Default-Item 2 --CheckList "SELECT:" 0 0 5 \ 1 "Premier élément" off \ 2 "Deuxième élément" off \ 3 "troisième élément" OFF




Comme vous pouvez le voir, dans l'exemple ci-dessus, nous avons référencé l'élément par son étiqueter, 2 Dans ce cas (nous développerons cela plus tard).

Spécification d'un délai après la confirmation: l'option de sommeil

Parfois, nous pouvons vouloir que notre application attend un certain nombre de secondes après le traitement d'une boîte de dialogue. Pour atteindre ce comportement, nous pouvons utiliser le --dormir Option et fournir le nombre de secondes à attendre comme valeur:

$ Dialog - Sleep 3 - Inputbox "Entrez votre nom:" 0 0

À la suite de la commande ci-dessus, après le zone de saisie le widget s'affiche et l'utilisateur frappe le ENTRER clé, 3 Les secondes sont attendues avant que la commande suivante dans le script d'appel ne soit effectuée.

Fournir un temps mort de choix

Dans certains cas, nous voulons peut-être donner à l'utilisateur un nombre maximum de secondes pour effectuer son choix. L'application de dialogue fournit le --temps libre Option pour obtenir ledit comportement. Le nombre de secondes de délai d'expiration doit être passé comme argument de l'option. Si une fois le montant spécifié de secondes à condition que l'utilisateur ne fasse pas son choix, l'application quittera un statut d'erreur:

$ Dialog - Timeout 3 - Inputbox "Entrez votre nom:" 0 0

Définition des étiquettes alternatives pour les boutons

Le dialogue L'utilitaire offre une série d'options pour remplacer l'étiquette par défaut pour les boutons: nous pouvons utiliser le --étiquette de sortie, --étiqueter, --étiquette d'assistance, --pas de label, --étiquette, --oui-label Pour changer les étiquettes des boutons «Exit», «Extra», «Help», «Non», «OK» et «Oui», respectivement.

Chacune des options susmentionnées prend une chaîne comme argument, qui est utilisée comme étiquette de bouton. Voici un exemple de l'utilisation des options:

$ Dialog --Default-Button "NON" \ --no-label "Je n'ai pas" \ --yes-label "Je fais" \ - yesno "voulez-vous vraiment formater la partition?"0 0

La commande ci-dessus produira le résultat suivant:





Widgets de dialogue

Jusqu'à présent, nous avons vu certains des plus utiles dialogue Options «communes». Nous allons maintenant voir comment utiliser certains des widgets disponibles en détail. Avant de continuer, nous devons spécifier la syntaxe générale. Lorsque nous lançons une boîte de dialogue, nous devons toujours fournir trois paramètres:

  1. Le texte à afficher dans le widget;
  2. La largeur du widget;
  3. La hauteur du widget;

Si nous fournissons une valeur de 0 Pour la largeur ou la hauteur, la valeur de l'attribut correspondant est définie automatiquement.

Le widget d'entrée

Le widget d'entrée est utilisé pour inciter l'utilisateur à répondre à une question avec une entrée textuelle. Le paramètre de texte est utilisé pour fournir la question: si la chaîne est plus longue que la boîte de dialogue, ce dernier deviendra défilable. Pour utiliser ce widget, nous invoquons la boîte de dialogue avec le --zone de saisie option:



À la sortie, l'entrée fournie par l'utilisateur s'affiche sur la sortie de la boîte de dialogue, qui par défaut est stderr.

Le widget de la liste de contrôle

Nous avons déjà vu à quoi ressemble le widget de la liste de contrôle dans les exemples précédents: Dans ce type de widget, une série de choix est fournie à l'utilisateur qui peut en sélectionner un ou plusieurs. Pour utiliser ce widget, nous devons utiliser le --liste de contrôle option, et, en plus des trois paramètres standard qui doivent être transmis à tous les widgets, nous devons également fournir liste et les choix à afficher.



Le hauteur de la ligne Le paramètre est utilisé pour définir le nombre de lignes doit être affiché en même temps: si le nombre de lignes est inférieur aux choix disponibles, le menu deviendra défilable. Si nous fournissons 0 comme la valeur de hauteur de la ligne Le nombre de lignes correspondra au nombre de choix.

Pour chaque choix, nous devons fournir un identifiant (balise), un nom et un statut qui peut être désactivé ou sur. Si le statut est sur Le choix sera vérifié par défaut. Une fois que nous avons confirmé nos choix, les balises liées à l'entrée que nous avons vérifiées seront affichées sur stderr:

$ Dialog --CheckList "Sélectionnez les éléments:" 0 0 0 0 \ 1 "Choix numéro un" OFF \ 2 "Choix numéro deux" sur 3 "Numéro de choix Trois" OFF \ 4 "Choix numéro quatre" sur

Avec la commande ci-dessus, nous avons lancé le menu avec 4 options et définissez les options 2 et 4 vérifiées par défaut. La sortie de la commande est la suivante:



Le widget radioliste

Le widget radioliste est lancé lorsque la boîte de dialogue est invoquée avec le --radioliste option. Il fonctionne de manière similaire au widget de la liste de contrôle, avec la différence que les choix s'excluent mutuellement, donc un seul élément peut être sélectionné. Voici comment nous utilisons le widget:

$ Dialog - Radiolist "Sélectionnez les éléments:" 0 0 0 0 \ 1 "Choix numéro un" OFF \ 2 "Choix numéro deux" sur \ 3 "Numéro de choix trois" OFF \ 4 "Numéro de choix" Off "


Étant donné que les choix s'excluent mutuellement, seule la première option définie sur Sur sera sélectionné comme par défaut.



Demandez à l'utilisateur un mot de passe à l'aide du widget de la boîte de passe

Le widget PasswordBox est utilisé pour permettre à un utilisateur de saisir un mot de passe. Pour des raisons de sécurité, le texte entré par l'utilisateur n'est pas affiché. Ce comportement peut être modifié en utilisant le --insécurité Option: Si nous le faisons, le widget affichera un astérisque pour chaque lettre du mot de passe entré dans le champ correspondant.

Nous utilisons le widget en lançant une boîte de dialogue avec le --boîte de passe option:

$ Dialog - INSECURE - Passwordbox "Entrez votre mot de passe:" 0 0

La sortie de la commande ci-dessus est:



Affichage d'un message avec le widget msgbox

L'utilisation de ce widget est vraiment simple: elle est invoquée en appelant la boîte de dialogue avec le --msgbox option et affiche un message qui est le contenu du texte paramètre. Un célibataire ou Individual D'ACCORD Le bouton s'affiche:

$ dialogue - msgbox "Ceci est un message très important qui devrait être lu attentivement!"0 0




Le widget de calendrier

Nous pouvons utiliser le widget de calendrier en invoquant l'utilitaire de dialogue avec le --calendrier option. Le widget nous a permis de sélectionner une date en choisissant le mois, le jour et l'année qui sont affichés dans des sections distinctes du widget. Il est possible de fournir une date par défaut en la passant dans le cadre de la commande.

Pour démarrer le widget avec le «cinquième jour de mai de l'année 2020» comme date par défaut, par exemple, nous exécuterions la commande suivante:

$ Dialog - Calendar "Sélectionnez une date:" 0 0 27 05 2020

Il produira la sortie suivante:






Nous pouvons nous déplacer entre les sections de widget en utilisant le LANGUETTE clé et modifier les paramètres en utilisant les touches flèches. Une fois que nous avons confirmé la sélection, elle est affichée à stderr au format jour / mois / an; Cela peut être modifié en utilisant le --format de date option avec un format compatible avec strime spécifié comme argument. Pour effectuer la sortie dans le format année / mois / jour, par exemple, nous courions:

$ Dialog - Date-Format% y /% m /% d --calendar "Sélectionnez une date" 0 0 27 05 2020

Inviter l'utilisateur à confirmer: le widget Yesno

Nous avons déjà rencontré ce widget: il nous a permis d'inviter l'utilisateur à confirmer. Lorsque nous l'utilisons, nous spécifions la question à poser via le texte paramètre. Selon le choix de l'utilisateur, un statut de sortie est renvoyé: 0 Si l'utilisateur confirme en cliquant sur le Oui bouton, 1 sinon.

Pour invoquer ce widget, nous devons utiliser le --Oui Non option:

$ Dialog --yesno "Confirmez-vous?"0 0

Voici le widget:



Gérer la sortie produite par un widget

Par défaut, la sortie produite par un widget s'affiche sur STDERR, donc par exemple, pour stocker les données obtenues d'un widget à un fichier, tout ce que nous avons à faire est de rediriger stderr Dans ledit fichier (si vous n'êtes pas familier avec les redirections, vous voudrez peut-être jeter un œil à l'introduction à Bash Shell Redirections Tutoriel):

$ DIALING --CHERCKLIST "Sélectionnez Éléments:" 0 0 0 0 \ 1 "Choix numéro un" OFF \ 2 "Choix numéro deux" sur 3 "Choix numéro trois" OFF \ 4 "Choix numéro quatre" sur 2> Choix.SMS

Une fois que l'utilisateur confirme ses choix, il sera écrit, séparé dans l'espace dans le choix.SMS déposer.

Et si nous voulons stocker la sélection directement dans une variable? Pour accomplir la tâche, nous devons utiliser le --stdout option, de sorte que la sortie du widget s'affiche sur stdin au lieu de stderr:

$ Choices = "$ (dialogue --stout --CheckList" Sélectionnez les éléments: "0 0 0 0 \ 1" Choix numéro un "OFF \ 2" Numéro de choix deux "sur \ 3" Numéro de choix de choix "OFF \ 4" quatre "sur)"


Dans l'exemple ci-dessus, le résultat du traitement du widget sera accessible via le les choix variable. Peut-être que nous voudrez peut-être les boucler:

$ pour le choix dans $ choix; faire écho "$ choix"; fait 2 4

Pour gérer le processus du Oui Non widget nous devons nous comporter différemment. Ledit widget, comme nous l'avons déjà vu, ne produit aucune sortie mais modifie le code de sortie de la commande utilisée pour le disposer en conséquence au choix de l'utilisateur. Si l'utilisateur confirme et répond affirmativement à la question, le code de sortie est défini sur 0, autrement à 1 (Cela peut sembler étrange, mais rappelez-vous que 0 moyens D'ACCORD alors que 1 est un statut de sortie qui signifie qu'une commande n'était pas successive). Sachant cela, nous pouvons écrire quelque chose comme:

Si la boîte de dialogue --yesno "Voulez-vous ouvrir une instance de gnome-terminal ?"0 0; puis effacer le gnome-terminal fi 

Conclusions

Dans ce tutoriel, nous avons vu comment nous pouvons utiliser le dialogue Application à utiliser ncurses widget dans les scripts shell. Nous avons d'abord vu des options communes qui peuvent être utilisées indépendamment du type de widget, que nous avons examiné certains widgets spécifiquement. Il y a beaucoup plus de widgets qui peuvent être utilisés avec dialogue: Pour une liste complète, je vous suggère de jeter un œil au manuel d'application.

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Comment intégrer les boîtes de dialogue dans les scripts shell avec whiptail
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Début avec Tkinter pour le tutoriel Python
  • Boucles imbriquées dans les scripts bash
  • Choses à installer sur Ubuntu 22.04
  • Commandes Linux: les 20 meilleures commandes les plus importantes que vous devez…
  • Choses à faire après l'installation d'Ubuntu 22.04 Jammy Jellyfish…
  • Commandes Linux de base
  • Installez Arch Linux dans VMware Workstation