BASH对话框动态菜单

时间:2015-11-01 02:24:38

标签: linux bash dynamic dialog

我需要使用数组中的变量创建一个带对话框的动态菜单。

继承我的代码:

#!/bin/bash
file="teste.cfg"
count=0;
while IFS=";" read nomeTarefa dirOrigem dirDest tipoBkp agendarBkp compactarBkp gerarLog || [[ -n "$gerarLog" ]]; do #RECEBE NAS VARS OS VALORES DELIMITADOS POR ;
    count=$((count + 1));#INICIA O COUNT PARA INCREMENTAR O OPTIONS
    options[$count]="$options$count) \"$nomeTarefa\"" #CONCATENA O OPTIONS

done < $file

options=$"$options"

for ((i=1; i<=count; i++))
do
    echo ${options[$i]}
done

options=(${options[$count]}) 

cmd=(dialog --keep-tite --menu "Select options:" 22 76 16)

choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)

我从文件中接收变量,然后我需要动态地构建“选项”来创建一个案例。

所以这个菜单对话框将有x个条目,当我运行其中任何一个时,我会做一些事情。

任何想法我如何构建这个“选项”?

提前致谢

2 个答案:

答案 0 :(得分:1)

我刚刚解决了这些问题。

#!/bin/bash
file="teste.cfg"
count=0;
while IFS=";" read nomeTarefa dirOrigem dirDest tipoBkp agendarBkp compactarBkp gerarLog || [[ -n "$gerarLog" ]]; do #RECEBE NAS VARS OS VALORES DELIMITADOS POR ;
        count=$((count + 1));#INICIA O COUNT PARA INCREMENTAR O OPTIONS 
    options[$count]=$count") \"$nomeTarefa\"" #CONCATENA O OPTIONS  
done < $file ##END READ FILE

options=(${options[@]})

cmd=(dialog --keep-tite --menu "Select options:" 22 76 16)

choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)

谢谢大家!

答案 1 :(得分:0)

奇怪的是,这里列出的解决方案对我不起作用。 ${options[@]}数组需要以下(相当奇怪)的结构才能起作用。这已在Ubuntu 18.04的bash上进行了测试:

 #Dynamic dialogs require an array that has a staggered structure
 #array[1]=1
 #array[2]=First_Menu_Option
 #array[3]=2
 #array[4]=Second_Menu_Option

这是bash代码,它从参数中读取目录列表并从中创建动态菜单:

 #! /bin/bash
 #usage: Dynamic_Menu.bash /home/user/target_directory     

 declare -a array

 i=1 #Index counter for adding to array
 j=1 #Option menu value generator

 while read line
 do     
    array[ $i ]=$j
    (( j++ ))
    array[ ($i + 1) ]=$line
    (( i=($i+2) ))

 done < <(find $1 -type f) #consume file path provided as argument

 #Define parameters for menu
 TERMINAL=$(tty) #Gather current terminal session for appropriate redirection
 HEIGHT=20
 WIDTH=76
 CHOICE_HEIGHT=16
 BACKTITLE="Back_Title"
 TITLE="Dynamic Dialog"
 MENU="Choose a file:"

 #Build the menu with variables & dynamic content
 CHOICE=$(dialog --clear \
                 --backtitle "$BACKTITLE" \
                 --title "$TITLE" \
                 --menu "$MENU" \
                 $HEIGHT $WIDTH $CHOICE_HEIGHT \
                 "${array[@]}" \
                 2>&1 >$TERMINAL)