是否可以使用管道填充Linux Bash脚本中的“选择”对话框?

时间:2011-07-25 13:51:03

标签: linux bash select

我正在尝试使用工作目录的文件名填充bash脚本中的Select对话框。

是否可以这样做:

ls | egrep 'somefilter' > foo.txt

dialog --backtitle "Linux Shell Script" --title "Main\
Menu" --menu "Move using [UP] [DOWN],[Enter] to\
Select" 15 50 3\
0 "line of foo.txt"
1 "2nd line of foo.txt"
..etc 2>/tmp/menuitem.$$

回复更新!

IFS=$'\n\t'
dialog --backtitle "Converter v0.1b" --title "Select File\
$(($counter+1))\\$na" --menu "Move using [UP] [DOWN],[Enter] to\    
Select" 15 50 8 $LINES     2>/tmp/menuitem.$$   

menuitem=`cat /tmp/menuitem.$$`

如上所述,它正确填写选择列表,任何关于如何获得选择号X的想法(假设3 = movie.mkv)。

现在:menuitem = 3(如果我在列表中选择了数字3)。

需要弄清楚如何让它说电影.mkv。 试了一堆,没办法。

1 个答案:

答案 0 :(得分:3)

这样的东西?

filter()
{
    NUM=0
    ls | egrep 'somefilter' | while read i ; do
        echo $NUM $i
        NUM=$(($NUM+1))
    done
}

LINES=$(filter)

dialog --backtitle "Linux Shell Script" --title "Main\
Menu" --menu "Move using [UP] [DOWN],[Enter] to\
Select" 15 50 3 $LINES 2>/tmp/menuitem.$$

(如果文件名中有空格,则无效)

编辑:这是一个丑陋的空间解决方案(好吧,它是一个bash脚本......):

filter() 
{
    NUM=0
    ls | egrep 'somefilter' | while read i ; do
        echo $'\t'$NUM$'\t'$i
        NUM=$(($NUM+1))
    done
}

LINES=$(filter)

IFS=$'\n\t'

dialog --backtitle "Linux Shell Script" --title "Main\
Menu" --menu "Move using [UP] [DOWN],[Enter] to\
Select" 15 50 3 $LINES 2>/tmp/menuitem.$$

unset IFS

<强> EDIT2: 使用它来检索所选的文件名:

ITEM=$(cat /tmp/menuitem.$$)
FILE=$(echo "$LINES" | sed -n 's/\t'$ITEM'\t//p')