私はzenity
が初めてで、zenity --file-selection
とwc
コマンドを使用してファイルをロードし、そのファイルのワードカウントを取得するための簡単なスクリプトを作成しようとしています。ファイルの閲覧に使用できるフォームを作成しましたが、出力を取得できません。間違いを犯している場所を教えてください。
私の現在のスクリプトは次のとおりです。
#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
コマンドの出力を変数に保存するには、コマンドをバックティックス(`command`
)で囲むか、$()
($(command)
)で囲む必要があります。一重引用符を使用しているため、stringwc $FILE
を保存し、実際には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
さらに、文字数と行数ではなく単語のみを取得するには、-w
オプションを使用します。
$ foo=$(wc -w /etc/fstab)
$ echo $foo
96 /etc/fstab
最後に、ファイル名なしで番号のみを取得するには、次を使用できます。
$ foo $(wc -w /etc/fstab | cut -d ' ' -f 1 )
$ echo $foo
96
私は正しいコードがこれであると思う:
#!/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