对话框显示一个包含文件输入的菜单

时间:2012-05-24 20:38:12

标签: bash dialog

在我的脚本中,我创建了一个文件,我想将其用作对话框程序的输入源,以便填充菜单对话框。

在文件中,每一行都包含一个数字和一个菜单标题。

INPUT=""
rm result
while read LINE
do
        case $LINE in
            '/ >'*|---*|'/ > '*)
                  continue;;
            esac
#       echo "1 $LINE "
                echo -n " 1  \"$LINE\"" >>result
done < tmpfile
#printf "%s " $INPUT
DIALOG  --menu "Latest news " 20 50 30 `cat result`

DIALOG是一个功能,这是源:

DIALOG () {
        dialog --backtitle "$TITLE" "$@"
        return $?
}

对话框的每个菜单项都需要一个标识(在我的例子中是数字)和一个标签(在双引号之间“,如果它是多个单词)。

问题在于即使文件内容具有正确的格式:

1 "item number 1" 2 "item number 2" ...

对话框命令不识别\“作为标签分隔符,但它将其视为字符串的一部分,导致混乱的菜单,其中我有每个单词的菜单语音。

但如果我尝试将相同的文件内容直接复制并粘贴到shell命令(不使用脚本),则菜单会正确显示。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您可以使用数组来保留结果,然后使用正确的引号将其发送到dialog

ar=()
while read n s ; do
    ar+=($n "$s")
done < result
dialog  --menu "Latest news " 20 50 30 "${ar[@]}"

您可能根本不必创建临时文件,可以直接填充数组。

答案 1 :(得分:2)

问题是空间。设置IFS = $'\ n'并将结果文件中的值保存在单独的行中,如上所示。