如何使用 zenity 文件选择

如何使用 zenity 文件选择

我是新手zenity,我正在尝试编写一个简单的脚本,用于使用命令加载文件zenity --file-selectionwc获取该文件的字数。我已成功创建了一个可用于浏览文件的表单,但我无法获得任何输出。你能告诉我我在哪里犯了错误吗?

我当前的脚本是:

#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

答案1

为了将命令的输出保存在变量中,必须将命令括在反引号 ( `command`) 中,或者最好括在$()( $(command)) 中。您使用的是单引号,这意味着您正在保存细绳 wc $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

答案2

我认为正确的代码可能是这样的:

#!/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

相关内容