web-dev-qa-db-fra.com

Comment utiliser la sélection de fichier zenity

Je suis nouveau sur zenity et j'essaye de créer 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 ne parviens pas à obtenir de sortie. Pouvez-vous s'il vous plaît me dire où je fais l'erreur?

Mon script actuel est:

#creates a box

if zenity --entry \
--title="Word count" \
--text="Enter file location" \
--entry-text "File path"

  then
#Zenity file selection code for browsing and selecting files

FILE=`zenity --file-selection --title="Select a File"`
case $? in
         0)
                echo "\"$FILE\" selected.";;
         1)
                echo "No file selected.";;
        -1)
                echo "An unexpected error has occurred.";;
esac

# To show the location in the text box

if zenity --entry \
--title="Word count" \
--text="Enter file location" \
--entry-text "$FILE"
then

#Word counting code

Word_count='wc $FILE'
zenity --info --title="Word Counted" --text="Counted words $Word_count"
fi
fi
7
Eka

Afin de sauvegarder la sortie d'une commande dans une variable, vous devez inclure la commande dans des backtics (`command`) ou, mieux, dans $() ($(command)). Vous utilisez des guillemets simples, ce qui signifie que vous enregistrez chaînewc $FILE et que vous n'exécutez pas réellement wc:

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

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

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

De plus, pour obtenir uniquement les mots et non 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 le numéro seul, sans nom de fichier, vous pouvez utiliser:

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

Je pense que le code correct peut être ceci:

#!/bin/bash

function count() {
  Word_count=$(wc -w < "$FILE")
  zenity --info --title="Word Counted" --text="Counted words $Word_count"
}

function choose() {
  FILE="$(zenity --file-selection --title='Select a File')"
  case $? in
           0)
                  count;;
           1)
                  zenity --question \
                         --title="Word counter" \
                         --text="No file selected. Do you want to select one?" \
                         && choose || exit;;
          -1)
                  echo "An unexpected error has occurred."; exit;;
  esac
}

choose
5
Helio