Comment ajouter une interface graphique aux scripts shell Linux

Publié: 2022-01-29

Une fenêtre d'information zenity lancée depuis un terminal Ubuntu.

Vous pouvez utiliser des fenêtres d'interface graphique, des curseurs, des boutons radio, des barres de progression, etc. dans vos scripts Bash. Apprenez à utiliser la boîte à outils zenity et donnez un coup de jeune à vos scripts Bash. Nous allons vous montrer comment.

Le script Bash est un langage de programmation puissant et, comme il est intégré au shell Bash, il est facilement accessible à tous. C'est un langage facile pour commencer à programmer. Parce qu'il est interprété, vous n'avez pas besoin de compiler vos scripts. Dès que vous avez édité le fichier de script et l'avez rendu exécutable, vous pouvez l'exécuter. Cela rend le cycle de codage, d'exécution et de débogage assez efficace.

Il y a deux plaintes principales que les gens ont avec les scripts Bash, et la première est la vitesse. Étant donné que le shell Bash interprète les commandes du script, elles ne s'exécutent pas aussi rapidement que le code compilé. Cependant, c'est comme se plaindre qu'un tracteur n'est pas aussi rapide qu'une voiture ; ils sont destinés à différentes choses.

Il existe cependant deux types de vitesse. Vous pouvez souvent assembler un script rapide et l'utiliser pour effectuer une tâche beaucoup plus rapidement que de développer une solution dans un langage compilé, tel que C.

La deuxième plainte que les gens ont avec les scripts Bash est l'interface utilisateur - c'est une fenêtre de terminal. Bien sûr, parfois l'interface n'a pas d'importance. Si la seule personne qui utilisera le script est son auteur, l'interface n'est probablement pas si importante. Cela n'a pas non plus d'importance pour les scripts qui effectuent un traitement en arrière-plan et par lots. En règle générale, ces scripts ne nécessitent pas beaucoup (le cas échéant) d'interaction de l'utilisateur.

Publicité

Il y a des occasions où vous avez besoin de quelque chose d'un peu plus intuitif et moderne que la fenêtre du terminal. La plupart des gens sont familiers avec une interface utilisateur graphique (GUI). Pour offrir aux utilisateurs une expérience aussi fluide que possible, vous devez créer et utiliser des éléments d'interface graphique à partir de vos scripts.

L'application zénité

zenity vous permet d'incorporer une large gamme d'éléments d'interface graphique dans vos scripts Bash. C'est une boîte à outils puissante qui donne à vos scripts une touche moderne et une apparence contemporaine et familière.

zenity est préinstallé sur les distributions Ubuntu, Fedora et Manjaro. Cela fait partie de GNOME. Si vous utilisez KDE, vous voudrez peut-être plutôt consulter kdialog , bien que zenity fonctionne sur n'importe quel environnement de bureau.

Les exemples de cet article vous montrent comment créer les différentes fenêtres de dialogue à partir de la ligne de commande, comment capturer leurs valeurs de retour et les sélections de l'utilisateur dans des variables, et comment utiliser les fenêtres de dialogue dans des scripts.

Nous terminons avec une petite application qui utilise les trois types de fenêtres de dialogue.

La fenêtre de dialogue Calendrier

Une fenêtre de dialogue de calendrier permet à quelqu'un de sélectionner une date. Pour en créer un avec zenity nécessite une seule commande de deux mots :

 zenity --calendrier 
Publicité

La fenêtre de dialogue du calendrier apparaît. Cela a toutes les fonctionnalités que vous attendez d'un sélecteur de date standard. Vous pouvez changer le mois et l'année, et cliquer sur un jour pour sélectionner cette date. Par défaut, la date du jour est mise en surbrillance lorsque la fenêtre apparaît.

Une fenêtre de calendrier zenity de juillet 2019.

Cliquez sur "OK" pour fermer la fenêtre de dialogue et sélectionnez la date en surbrillance. Double-cliquer sur une date a le même effet.

Si vous ne souhaitez pas sélectionner de date, cliquez sur "Annuler", appuyez sur la touche "Echap" de votre clavier ou fermez la fenêtre de dialogue.

Une fenêtre de calendrier zenity avec le 19 août 2019 sélectionné.

Dans l'exemple ci-dessus, le 19 août 2019 est sélectionné. Si l'utilisateur clique sur "OK", le calendrier se ferme et la date sélectionnée s'imprime dans la fenêtre du terminal.

La date sélectionnée sur le calendrier (19/08/2019) affichée dans la fenêtre du terminal.

Vous pouvez ignorer la ligne « GTKDialog mappé sans parent transitoire. C'est déconseillé. »

GTK signifie GIMP Tool Kit, qui est la boîte à outils utilisée pour développer l'interface GNOME. Il a été conçu à l'origine par les auteurs du programme de manipulation d'images GNU (GIMP). GNU signifie GNU's Not Unix.

Publicité

Le moteur GTK avertit les auteurs de zenity qu'ils ont utilisé un composant GTK de manière non standard.

Capture de la valeur de date

L'impression de la date sur le terminal ne fait pas grand-chose pour nous. Si nous allons appeler ce calendrier à partir de l'un de nos scripts, nous devons capturer la valeur de date sélectionnée afin de pouvoir en faire quelque chose d'utile dans notre script. Nous personnaliserons également légèrement le calendrier.

Nous utiliserons les options suivantes avec le calendrier. Ils doivent tous être utilisés avec le drapeau à double tiret "-":

  • –text : spécifie une chaîne de texte à afficher dans le calendrier. Il remplace la valeur par défaut, "Sélectionnez une date ci-dessous".
  • –title : Définit le titre de la fenêtre de dialogue du calendrier.
  • –day : définit le jour sélectionné à l'ouverture du calendrier.
  • –month : Définit le mois sélectionné à l'ouverture du calendrier.
  • –year : Définit l'année qui est sélectionnée lorsque le calendrier s'ouvre.

Nous utilisons une variable appelée ChosenDate pour capturer la date renvoyée par le calendrier. Et nous utilisons echo $ChosenDate pour imprimer cette date dans la fenêtre du terminal.

Oui, nous avons obtenu le même résultat dans l'exemple précédent, mais ici, nous avons la date sélectionnée stockée dans une variable. Dans l'exemple précédent, il a été imprimé et oublié.

 ChosenDate=$(zenity -- calendar --text "Choose a date" --title "How-To Geek Rota" --day 1 -- month 9 --year 2019); echo $ChosenDate 

Maintenant, le calendrier affiche notre invite et notre titre de fenêtre. La date est définie sur la date de début que nous avons choisie plutôt que sur la date d'aujourd'hui.

calendrier zenity avec une date de début sélectionnée (1er septembre 2019).

Publicité

Nous pouvons également personnaliser le format de la chaîne de date renvoyée lorsqu'une sélection est effectuée. L'option --date-format doit être suivie d'un spécificateur de format. Il s'agit d'une chaîne de jetons qui définissent les données et les formats à inclure dans la sortie. Les jetons sont les mêmes que ceux utilisés avec la fonction de langage C strftime() et il y en a une grande sélection.

Les jetons que nous utilisons sont :

  • %A : Le nom complet du jour de la semaine.
  • %d : Le jour du mois sous forme de chiffre.
  • %m : Le mois sous forme de chiffre.
  • %y : L'année sur deux chiffres (pas de siècle).
 ChosenDate=$(zenity -- calendar --text "Choose a date" --title "How-To Geek Rota" --date-format="%A %d/%m/%y" --day 1 -- mois 9 --année 2019); echo $ChosenDate 

Quelqu'un sélectionne une date :

fenêtre du calendrier zenity avec le 16 septembre 2019 sélectionné.

Et la date est retournée en utilisant notre format. Il affiche le nom du jour de la semaine, suivi de la date dans l'ordre européen : jour, mois, année.

La fenêtre de dialogue de sélection de fichier : choisir un fichier

Les fenêtres de dialogue de sélection de fichiers sont assez complexes. Les utilisateurs peuvent parcourir le système de fichiers, mettre en surbrillance un ou plusieurs fichiers, puis cliquer sur "OK" pour sélectionner ces fichiers ou annuler complètement la sélection.

zenity fournit toutes ces fonctionnalités, et plus encore. Et c'est aussi facile à utiliser que la fenêtre de dialogue du calendrier.

Les nouvelles options que nous allons utiliser sont :

  • –file-selection : Indique à zenity que nous voulons utiliser une fenêtre de dialogue de sélection de fichier.
  • –multiple : permet à quelqu'un de sélectionner plus d'un fichier.
  • –file-filter : Indique à la fenêtre de dialogue de fichier quels types de fichiers afficher.
 zenity --file-selection --tile "How-To Geek" --multiple --file-filter='*.mm *.png *.page *.sh *.txt' 

La fenêtre de dialogue de sélection de fichier est aussi fonctionnelle que n'importe quelle autre fenêtre de sélection de fichier.

fenêtre de dialogue de section de fichier zenity avec un dossier sélectionné.

L'utilisateur peut parcourir le système de fichiers et sélectionner le fichier de son choix.

fenêtre de dialogue de sélection de fichier zenity avec un fichier sélectionné

Publicité

Nous avons parcouru un nouveau répertoire et sélectionné un fichier appelé "button_hybrid.png".

Lorsque vous cliquez sur "OK", la fenêtre de dialogue de sélection de fichier se ferme et le nom de fichier et le chemin s'impriment dans la fenêtre du terminal.

Si vous avez besoin d'utiliser le nom de fichier dans un traitement ultérieur, vous pouvez le capturer dans une variable, comme vous l'avez fait pour la date du calendrier.

La fenêtre de dialogue de sélection de fichier : enregistrement d'un fichier

Si nous ajoutons une option, nous pouvons transformer la fenêtre de dialogue de sélection de fichier en une fenêtre de dialogue d'enregistrement de fichier. L'option est --save . Nous allons également utiliser l'option --confirm-overwrite . Cela invite la personne à confirmer qu'elle veut écraser un fichier existant.

 Réponse=$(zenity --file-selection --save --confirm-overwrite); echo $Réponse 

La fenêtre de dialogue d'enregistrement de fichier apparaît. Notez qu'il y a un champ de texte où quelqu'un peut taper un nom de fichier.

fenêtre de dialogue d'enregistrement du fichier zenity.

L'utilisateur peut accéder à l'emplacement de son choix dans le système de fichiers, donner un nom au fichier ou cliquer sur un fichier existant pour le remplacer.

boîte de dialogue d'enregistrement de fichier zenity avec un fichier existant sélectionné.

Publicité

Dans l'exemple ci-dessus, l'utilisateur a mis en surbrillance un fichier existant.

Lorsqu'il clique sur "OK", une fenêtre de dialogue de confirmation apparaît lui demandant de confirmer qu'il souhaite remplacer le fichier existant. Notez que le nom du fichier apparaît dans la boîte de dialogue d'avertissement. C'est le genre d'attention portée aux détails qui donne à zenity son apparence professionnelle.

Si nous n'avions pas utilisé l'option --confirm-overwrite , le fichier aurait été écrasé silencieusement.

boîte de dialogue de confirmation d'écrasement de zenity.

Le nom du fichier est stocké dans la variable Response , qui s'affiche dans la fenêtre du terminal.

Fenêtres de dialogue de notification

Avec zenity , l'inclusion de fenêtres de dialogue de notification élégantes dans vos scripts se fait sans effort. Il existe des fenêtres de dialogue standard auxquelles vous pouvez faire appel pour fournir des informations, des avertissements, des messages d'erreur et des questions à l'utilisateur.

Pour créer une fenêtre de dialogue de message d'erreur, utilisez la commande suivante :

 zenity --error --width 300 --text "Autorisation refusée. Impossible d'écrire dans le fichier."

Les nouvelles options que nous utilisons sont :

  • –error : indique à zenity que nous voulons utiliser une fenêtre de dialogue d'erreur.
  • –width : Définit la largeur initiale de la fenêtre.

Publicité

La fenêtre de dialogue d'erreur apparaît à la largeur spécifiée. Il utilise l'icône d'erreur GTK standard.

fenêtre de dialogue d'erreur zenity.

Pour créer une fenêtre de dialogue d'informations, utilisez la commande suivante :

 zenity --info --width 300 --text "Mise à jour terminée. Cliquez sur OK pour continuer."

La nouvelle option que nous utilisons est --info , qui indique à zenity de créer une fenêtre de dialogue d'informations.

fenêtre de dialogue d'information zenity.

Pour créer une fenêtre de dialogue de question, utilisez la commande suivante :

 zenity --question --width 300 --text "Etes-vous heureux de continuer?"; echo $?

La nouvelle option que nous utilisons est --question , qui indique à zenity de créer une fenêtre de dialogue de question.

Le $? est un paramètre spécial. Il contient la valeur de retour du pipeline de premier plan le plus récemment exécuté. En termes généraux, il s'agit de la valeur du processus le plus récemment fermé. Une valeur nulle signifie « OK » et une valeur de un ou plusieurs signifie « Annuler ».

Publicité

Il s'agit d'une technique générale que vous pouvez appliquer à n'importe quelle fenêtre de dialogue zenity . En vérifiant cette valeur dans votre script, vous pouvez déterminer si les données renvoyées par une fenêtre de dialogue doivent être traitées ou ignorées.

dialogue de question zenity.

Nous avons cliqué sur "Oui", donc le code de retour est un zéro indiquant "OK".

Pour créer une fenêtre de dialogue d'avertissement, utilisez la commande suivante :

 zenity --warning --title "Low Hard Drive Space" --width 300 --text "Il se peut qu'il n'y ait pas assez d'espace sur le disque dur pour enregistrer la sauvegarde."

La nouvelle option que nous utilisons est --warning , qui indique à zenity de créer une fenêtre de dialogue d'avertissement.

La fenêtre de dialogue d'avertissement s'affiche. Ce n'est pas une question, donc il n'a qu'un seul bouton.

fenêtre de dialogue d'avertissement zenity.

La fenêtre de dialogue de progression

Vous pouvez utiliser la fenêtre de dialogue de progression de zenity pour afficher une barre de progression qui indique à quel point votre script est proche de l'achèvement.

Publicité

La barre de progression est avancée en fonction des valeurs qui y sont transmises à partir de votre script. Pour illustrer le principe, utilisez la commande suivante :

 (for i in $(seq 0 10 100); do echo $i; sleep 1; done) 

La commande se décompose ainsi :

  • La commande seq parcourt une séquence de 0 à 100, par pas de 10.
  • A chaque étape, la valeur est stockée dans la variable i . Cela s'imprime dans la fenêtre du terminal.
  • La commande s'interrompt pendant une seconde, en raison de la commande sleep 1 .

Nous pouvons l'utiliser avec la fenêtre de dialogue de progression de zenity pour illustrer la barre de progression. Notez que nous dirigeons la sortie de la commande précédente vers zenity:

 (for i in $(seq 0 10 100); do echo $i; sleep 1; done) | zenity --progress --title "How-To Geek" -- fermeture automatique 

Les nouvelles options que nous utilisons sont :

  • –progress : indique à zenity que nous voulons utiliser une fenêtre de dialogue de progression.
  • –auto-close : ferme la boîte de dialogue lorsque la barre de progression atteint 100 %.

La fenêtre de dialogue de progression apparaît et la barre avance vers 100 %, en s'arrêtant une seconde entre chaque étape.

boîte de dialogue de progression zenity.

Nous pouvons utiliser ce concept de canalisation des valeurs dans zenity pour inclure la fenêtre de dialogue de progression dans un script.

Entrez ce texte dans un éditeur et enregistrez-le sous « progress.sh ».

 !/bin/bas

fonction liste de travail () {

echo "# Premier élément de travail" 
écho "25"
dormir 1

echo "# Deuxième élément de travail" 
écho "50"
dormir 1

echo "# Troisième élément de travail" 
écho "75"
dormir 1

echo "# Dernier élément de travail" 
écho "100"
dormir 1

}

liste de travail | zenity --progress --title "Comment Geek" --auto-close

sortie 0

Voici une ventilation du script :

  • Le script définit une fonction appelée work-list . C'est là que vous mettez vos commandes et instructions pour effectuer un travail réel. Remplacez chacune des commandes sleep 1 par vos vraies commandes.
  • zenity accepte les lignes d' echo "# ..." et les affiche dans la fenêtre de dialogue de progression. Modifiez le texte de ces lignes afin qu'elles transmettent des messages informatifs à l'utilisateur.
  • Les lignes d' echo contenant des nombres, telles que echo "25" , sont également acceptées par zenity et définissent la valeur de la barre de progression.
  • La fonction work-list est appelée et redirigée vers zenity .

Utilisez cette commande pour rendre le script exécutable :

 chmod +x progression.sh 

Utilisez cette commande pour exécuter le script :

 ./progress.sh 

Le script s'exécute et le message texte change à chaque phase de l'exécution du script. La barre de progression se déplace par étapes vers 100 %.

fenêtre de dialogue de la barre de progression zenity.

La fenêtre de dialogue Echelle

La fenêtre de dialogue d'échelle permet à quelqu'un de déplacer un curseur pour choisir une valeur numérique. Cela signifie qu'elle ne peut pas saisir une valeur trop élevée ou trop faible.

Les nouvelles options que nous utilisons sont :

  • –scale : indique à zenity que nous voulons utiliser une fenêtre de dialogue d'échelle.
  • –min-value : définit la valeur minimale de l'échelle.
  • –max-value : Définit la valeur maximale de l'échelle.
  • –step : Définit le degré de déplacement du curseur lorsque les touches fléchées sont utilisées. Cela n'affecte pas les mouvements du curseur si quelqu'un utilise la souris.
  • –value : Définit la valeur initiale et la position du curseur.

Voici la commande que nous utilisons :

 Response=$(zenity --scale --title "How-To Geek" --text "Sélectionnez le grossissement." --min-value=0 --max-value=30 --step=3 --value15); echo $Réponse 

Publicité

La fenêtre de dialogue du curseur apparaît avec le curseur réglé sur 15.

fenêtre de dialogue de l'échelle de zénitude.

L'utilisateur peut déplacer le curseur pour sélectionner une nouvelle valeur.

boîte de dialogue d'échelle de zénité avec sélection de l'utilisateur

Lorsqu'elle clique sur "OK", la valeur est transférée dans la variable Response et imprimée dans la fenêtre du terminal.

La fenêtre de dialogue d'entrée

La fenêtre de dialogue de saisie permet à quelqu'un de saisir du texte.

Les nouvelles options que nous utilisons sont :

  • –entry : indique à zenity que nous voulons utiliser une fenêtre de dialogue d'entrée.
  • –entry-text : vous pouvez l'utiliser si vous souhaitez saisir une valeur suggérée dans le champ de saisie de texte. Nous utilisons "" pour forcer un champ vide. Ce n'est pas strictement requis, mais nous voulions documenter l'option.

La commande complète ressemble à ceci :

 Response=$(zenity --entry --text "Entrez votre terme de recherche" --title "Howe-To Geek" --entry-text=""); echo $Réponse 

Une simple fenêtre de dialogue apparaît, contenant un champ de saisie de texte.

fenêtre de dialogue d'entrée zenity.

Quelqu'un peut saisir et modifier du texte.

fenêtre de dialogue de saisie zenity avec texte saisi dans le champ de texte.

Lorsqu'il clique sur « OK », la valeur qu'il a saisie est affectée à la variable Réponse. Nous utilisons echo pour imprimer la valeur de la variable dans la fenêtre du terminal.

Mettre tous ensemble

Assemblons ces techniques et créons un script fonctionnel. Le script effectuera une analyse des informations sur le matériel et présentera les résultats à l'utilisateur dans une fenêtre de texte défilante. Elle peut choisir un type de balayage long ou court.

Publicité

Pour ce script, nous utiliserons trois types de fenêtres de dialogue, dont deux sont nouvelles pour nous :

  • La première est une fenêtre de dialogue de liste. Cela permet à quelqu'un de faire un choix.
  • La seconde est une fenêtre de dialogue de progression qui permet à l'utilisateur de savoir que quelque chose se passe et qu'il doit attendre.
  • La troisième est une fenêtre d'informations textuelles, qui affiche les résultats à l'utilisateur.

Entrez ce texte dans un éditeur et enregistrez-le sous « hardware-info.sh ».

 #!/bin/bash

# Afficher la liste du matériel pour cet ordinateur

FichierTemp=$(mktemp)

ListType=`zenity --width=400 --height=275 --list --radiolist \
     --title 'Analyse matérielle' \
     --text 'Sélectionnez le type d'analyse :' \
     --column 'Sélectionner' \
     --column 'Type de numérisation' VRAI "Court" FAUX "Long"`

si [[ $ ? -eq 1 ]] ; ensuite

  # ils ont appuyé sur Annuler ou fermé la fenêtre de dialogue 
  zenity --error --title="Scan refusé" --width=200 \
       --text="Analyse matérielle ignorée"
  sortie 1
 
elif [ $ListeType == "Court" ]; ensuite

  # ils ont sélectionné le bouton radio court 
  Drapeau="--court"
 
autre

  # ils ont sélectionné le bouton radio long 
  Drapeau="" 
Fi

# recherche les informations sur le matériel avec la valeur appropriée dans $Flag
hwinfo $Flag | tee >(zenity --width=200 --height=100 \
     --title="Assemblage d'informations" --progress \
     --pulsate --text="Vérification du matériel..." \
     --auto-kill --auto-close) >${TempFile}
 
# Afficher les informations sur le matériel dans une fenêtre déroulante
zenity --width=800 --height=600 \
     --title "Détails du matériel" \
     --text-info --filename="${TempFile}"
 
sortie 0

Utilisez cette commande pour le rendre exécutable :

 chmod +x info-matériel.sh 

"chmod +x haredware-info.sh dans une" fenêtre de terminal.

Ce script crée un fichier temporaire et le nom du fichier est contenu dans la variable TempFile :

 FichierTemp=$(mktemp)

Le script utilise l'option --list pour créer une fenêtre de dialogue zenity appelée fenêtre de dialogue de liste. Les caractères "\" à la fin des lignes indiquent au script de les traiter comme une longue ligne enroulée autour. Voici le processus :

  • Nous spécifions une largeur et une hauteur pour la fenêtre.
  • La fenêtre de dialogue de liste prend en charge les colonnes. L'option --radiolist fait que la première colonne est une colonne de boutons radio.
  • Nous définissons un titre et une invite de texte pour la fenêtre.
  • Nous définissons le titre de la première colonne sur "Sélectionner". Le contenu de cette colonne sera les boutons radio.
  • Nous définissons le titre de la deuxième colonne sur "Sélectionner" et nous fournissons le contenu de la deuxième colonne. Cette colonne contient deux libellés de texte : "Court" et "Long". Les indicateurs VRAI et FAUX signifient que l'option "Court" est sélectionnée par défaut lorsque la fenêtre de dialogue apparaît.
  • Nous stockons le résultat de cette fenêtre de dialogue dans une variable appelée ListType .
 ListType=`zenity --width=400 --height=275 --list --radiolist \ 
     --title 'Analyse matérielle' \ 
     --text 'Sélectionnez le type d'analyse :' \ 
     --column 'Sélectionner' \ 
     --column 'Type de numérisation' VRAI "Court" FAUX "Long"`

Si l'utilisateur appuie sur "Annuler", nous n'avons pas besoin de vérifier la valeur dans ListType, nous pouvons simplement quitter. S'il appuie sur "OK", nous devons savoir s'il a sélectionné le bouton radio "Court" ou "Long":

  • Le paramètre spécial $? est égal à zéro si l'utilisateur a appuyé sur "OK". Il est égal à un s'il a appuyé sur "Annuler" ou fermé la fenêtre.
  • S'il est égal à un, le script affiche une fenêtre de dialogue d'informations d'erreur et se termine. S'il appuie sur "OK", nous passons au test de la valeur dans la variable ListType .
  • Si la variable ListType contient la valeur « Short », le script définit une variable appelée Flag sur la valeur « –short ».
  • Si la variable ListType ne contient pas la valeur "Short", elle doit contenir la valeur "Long". Le script définit une variable appelée Flag sur la valeur "", qui est une chaîne vide.
  • Le script utilise la variable Flag dans la section suivante.
 si [[ $ ? -eq 1 ]] ; ensuite 

  # ils ont appuyé sur Annuler ou fermé la fenêtre de dialogue 
  zenity --error --title="Analyse refusée" --width=200 \ --text="Analyse matérielle ignorée" 
  sortie 1 

elif [ $ListeType == "Court" ]; ensuite 

 # ils ont sélectionné le bouton radio court 
 Drapeau="--court" 

autre 

 # ils ont sélectionné le bouton radio long 
 Drapeau="" 
Fi
Publicité

Maintenant que le script sait quel type d'analyse l'utilisateur souhaite, nous pouvons effectuer l'analyse des informations matérielles :

  • Le script appelle la commande hwinfo et lui transmet la valeur dans la variable Flag .
  • Si Flag contient « –short », la commande hwinfo effectue une brève analyse. Si la valeur de Flag est "", rien ne passe à hwinfo et une analyse longue par défaut est effectuée.
  • Le script dirige la sortie de hwinfo vers tee . tee envoie la sortie dans zenity et le TempFile .
  • Le script crée une fenêtre de dialogue de barre de progression. Il définit la largeur et la hauteur de la fenêtre de dialogue, ainsi que le titre et les textes d'invite.
  • Le script ne peut pas savoir à l'avance la quantité d'informations que la commande hwinfo produira, il ne peut donc pas définir la barre de progression pour avancer correctement à 100 %. L'option --pulsate entraîne l'affichage d'un indicateur mobile dans la boîte de dialogue de progression. Cela informe l'utilisateur que quelque chose se passe et qu'il doit attendre.
  • L'option --auto-kill termine le script si quelqu'un clique sur "Annuler".
  • L'option --auto-close provoque la fermeture automatique de la boîte de dialogue de progression lorsque le processus qu'elle surveille se termine.
 # recherche les informations sur le matériel avec la valeur appropriée dans $Flag
hwinfo $Flag | tee >(zenity --width=200 --height=100 \
     --title="Assemblage d'informations" --progress \
     --pulsate --text="Vérification du matériel..." \
     --auto-kill --auto-close) >${TempFile}

Lorsque l'analyse hwinfo terminée, le script appelle zenity pour créer une fenêtre de dialogue d'informations textuelles avec l'option --text-info . La fenêtre de dialogue d'informations textuelles affiche le contenu du fichier TempFile :

  • Le script définit la largeur et la hauteur de la fenêtre de dialogue et le texte du titre.
  • L'option --flename est utilisée pour lire le contenu du fichier contenu dans la variable TempFIle .
 # Afficher les informations sur le matériel dans une fenêtre déroulante 
zenity --width=800 --height=600 \ 
     --title "Détails du matériel" \ 
     --text-info --filename="${TempFile}"

Lorsque l'utilisateur ferme la fenêtre de dialogue d'informations textuelles, le script se ferme.

 sortie 0

Allumons-le et regardons.

 ./hardware-info.sh 

La zone de liste apparaît. L'option "Court" est sélectionnée par défaut.

Boîte de dialogue Liste avec l'option "Court" sélectionnée.

Sélectionnons "Long", puis cliquez sur "OK".

Boîte de dialogue Liste avec l'option "Long" sélectionnée.

La fenêtre de progression apparaît avec un indicateur coulissant. Il reste à l'écran jusqu'à ce que l'analyse du matériel soit terminée.

Fenêtre de progression avec un indicateur coulissant.

Lorsque l'analyse du matériel est terminée, la fenêtre de dialogue d'informations textuelles apparaît avec les détails de l'analyse.

Informations sur l'analyse du matériel dans une fenêtre de dialogue d'informations textuelles.

Cliquez sur OK."

Publicité

Même un jockey de ligne de commande pur et dur doit admettre que quelques fenêtres de dialogue GUI peuvent donner à un humble script Bash une touche professionnelle.