Verwendung der Auswahl von Zenity-Dateien

7

Ich bin neu in zenityund ich versuche, ein einfaches Skript zum Laden einer Datei mit zenity --file-selectionund dem wcBefehl zum Abrufen der Wortanzahl dieser Datei zu erstellen. Ich habe erfolgreich ein Formular erstellt, mit dem die Datei durchsucht werden kann, kann jedoch keine Ausgabe erhalten. Können Sie mir bitte sagen, wo ich den Fehler mache?

Mein aktuelles Skript lautet:

#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
Eka
quelle
1
Wie kommt es , dass Sie läuft FILE=`zenity ..., noch wordcount='wc..?
Muru
1
@muru Ich kopiere gerade diesen Code von einer Website eingefügt und gemäß meinem Skript geändert :)
Eka
Fall -1 wird nie erreicht, da ein Rückkehrcode nicht negativ sein kann
user3728501

Antworten:

9

Um die Ausgabe eines Befehls in einer Variablen zu speichern, müssen Sie den Befehl in backtics ( `command`) oder besser in $()( $(command)) einschließen . Sie verwenden einfache Anführungszeichen, was bedeutet, dass Sie die Zeichenfolge speichern wc $FILEund nicht tatsächlich ausführen 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

Verwenden Sie außerdem die folgende -wOption , um nur die Wörter und nicht die Anzahl der Zeichen und Zeilen abzurufen:

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

Um die Nummer ohne Dateinamen zu erhalten, können Sie Folgendes verwenden:

$ foo $(wc -w /etc/fstab | cut -d ' ' -f 1 )
$ echo $foo
96
Terdon
quelle
Hey, danke, dass du dieses Problem gelöst hast. Ich war einige Zeit in diesem Fehler gefangen. Kann ich noch eine Frage stellen? Wie kann ich meinem Formular eine zusätzliche Schaltfläche hinzufügen
Eka
@Eka Ich kenne Zenity nicht, aber bitte stellen Sie auf jeden Fall neue Fragen, indem Sie eine neue Frage stellen.
Terdon
1
@Eka mein letztes Beispiel zeigt, wie man die Anzahl der Wörter alleine bekommt. Wenn Sie alle Informationen nur ohne den Dateinamen haben möchten, ist es am einfachsten, sie wcals Eingabestream anstelle eines Dateinamens zu übergeben:wc < "$FILE"
Terdon
5

Ich denke, dass der richtige Code folgender sein könnte:

#!/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
Helio
quelle
1
FILE="$(zenity --file-selection --title="Select a File")"Ich denke, das ist ein Syntaxfehler.
Ismael Miguel