7 votes

Comment utiliser la sélection de fichier zenity

Je suis nouveau sur zenity et j'essaie de faire un script simple pour charger un fichier en utilisant zenity --file-selection et la commande wc pour obtenir le nombre de mots de ce fichier. J'ai réussi à créer un formulaire qui peut être utilisé pour parcourir le fichier mais je n'arrive pas à obtenir de résultat. Pouvez-vous me dire où je me trompe?

Mon script actuel est:

#crée une boîte

if zenity --entry \
--title="Nombre de mots" \
--text="Entrer l'emplacement du fichier" \
--entry-text "Chemin du fichier"

  then
#Code de sélection de fichier zenity pour parcourir et sélectionner des fichiers

FILE=`zenity --file-selection --title="Sélectionner un fichier"`
case $? in
         0)
                echo "\"$FILE\" sélectionné.";;
         1)
                echo "Aucun fichier sélectionné.";;
        -1)
                echo "Une erreur inattendue s'est produite.";;
esac

# Pour afficher l'emplacement dans la boîte de texte

if zenity --entry \
--title="Nombre de mots" \
--text="Entrer l'emplacement du fichier" \
--entry-text "$FILE"
then

#Code de comptage de mots

word_count='wc $FILE'
zenity --info --title="Nombre de mots comptés" --text="Mots comptés $word_count"
fi
fi

9voto

Stewart Points 1385

Afin de sauvegarder la sortie d'une commande dans une variable, vous devez encadrer la commande entre des backtics (`commande`) ou, mieux, entre $() ($(commande)). Vous utilisez des guillemets simples, ce qui signifie que vous sauvegardez la chaîne wc $FICHIER et non pas réellement exécuter wc:

$ foo='wc /etc/fstab' ## FAUX
$ echo $foo
wc /etc/fstab

$ foo=`wc /etc/fstab`  ## CORRECT
$ echo $foo 
23 96 994 /etc/fstab

$ foo=$(wc /etc/fstab)   ## CORRECT
$ echo $foo 
23 96 994 /etc/fstab

De plus, afin d'obtenir seulement les mots et non pas le nombre de caractères et de lignes, utilisez l'option -w:

$ foo=$(wc -w /etc/fstab)   
$ echo $foo 
96 /etc/fstab

Enfin, pour obtenir seulement le nombre, sans le nom du fichier, vous pouvez utiliser:

$ foo $(wc -w /etc/fstab | cut -d ' ' -f 1 )
$ echo $foo
96

6voto

0x2b3bfa0 Points 7873

Je pense que le code correct pourrait être celui-ci :

#!/bin/bash

fonction count() {
  word_count=$(wc -w < "$FILE")
  zenity --info --title="Comptage des mots" --text="Mots comptés : $word_count"
}

fonction choose() {
  FILE="$(zenity --file-selection --title='Sélectionner un fichier')"
  case $? in
           0)
                  count;;
           1)
                  zenity --question \
                         --title="Compteur de mots" \
                         --text="Aucun fichier sélectionné. Voulez-vous en sélectionner un ?" \
                         && choose || exit;;
          -1)
                  echo "Une erreur inattendue s'est produite."; exit;;
  esac
}

choose

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X