Comment utiliser les widgets ncurses dans des scripts shell sur Linux
- 1235
- 270
- Zoe Dupuis
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
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:
- Le texte à afficher dans le widget;
- La largeur du widget;
- 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
- « Introduction à l'API JavaScript Fetch
- Kali Linux - Échec de l'observation de l'inrease - correction du référentiel »