Como usar a seleção de arquivos zenity

7

Eu sou novo em zenity e estou tentando criar um script simples para carregar um arquivo usando zenity --file-selection e o comando wc para obter a contagem de palavras desse arquivo. Eu fiz com sucesso um formulário que pode ser usado para procurar o arquivo, mas não consigo obter nenhuma saída. Você pode por favor me dizer onde estou cometendo o erro?

Meu script atual é:

#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
    
por Eka 22.03.2015 / 12:58

2 respostas

9

Para salvar a saída de um comando em uma variável, você deve colocar o comando no backtics ( 'command' ) ou, melhor, em $() ( $(command) ). Você está usando aspas simples, o que significa que você está salvando a string wc $FILE e não está realmente executando 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

Além disso, para obter apenas as palavras e não o número de caracteres e linhas, use a opção -w :

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

Finalmente, para obter o número sozinho, sem nome de arquivo, você pode usar:

$ foo $(wc -w /etc/fstab | cut -d ' ' -f 1 )
$ echo $foo
96
    
por terdon 22.03.2015 / 13:21
5

Eu acho que o código correto pode ser isso:

#!/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
    
por Helio 22.03.2015 / 13:23