bash script select menu

1

Eu tenho muitas notas coletadas da web e escrevi scripts para gerenciá-los.

Eu tenho alguns scripts que dependem do select para criar menus.

Pergunta: em um contexto de menu aninhado, é possível reverter para um menu anterior dentro do script? Eu tenho um strong sentimento de que isso pode não ser possível, mas estou postando isso na esperança de que haja um jeito.

Para explicar o que quero dizer: diga que o usuário faz uma escolha contra o menu-1, que determina o que aparece no menu-2 que segue. Se o usuário seleciona "done" no menu-2, existe um dispositivo de loop para trazer o usuário de volta ao menu-1?

O script abaixo contém três opções - Gostaria de poder voltar do terceiro para o segundo:

curd=($(ls)); # array

select dirup in ${curd[@]} done 

do


cd $dirup;
    ar=($(ls | awk -F"." '{ print $1 }' | awk -F"-" '{ for(i=2; i<=NF; i++) print $i }' | sort | uniq)); 


select choice in ${ar[@]} done # select list
    do 
        echo "you selected: $choice"
        [[ $choice == "done" ]] && exit 
        ar=($( find . -type f -maxdepth 1 -name "*$choice*" ));
        ((cnt=${#ar[@]}+1))
        select ntit in ${ar[@]} done
            do 
                echo "choice is:[ $REPLY ]"
                for i in $REPLY; # $REPLAY contains numbers
                    do
                      if [ $i -lt $cnt ]
                        then 
                            ((var=$i-1)); 
                            open ${ar[$var]}; 
                        else 
                            exit
                      fi
                    done

            done

      done

done
    
por Tom 26.10.2012 / 17:19

1 resposta

1

Use break em vez de exit . Note, no entanto, que o menu não é reimpresso ao retornar a um menu superior.

Exemplo:

select x in nothing inner quit ; do
    [[ $x == quit ]] && break
    if [[ $x == inner ]] ; then
        select y in NOTHING BACK ; do
            [[ $y == BACK ]] && break
        done
    fi
done
    
por 26.10.2012 / 17:50