2

I've many notes gleaned from the web and have written bash scripts to manage them.

I've some scripts working that depend on select to make menus.

Question: in a nested menu context, is it possible to revert to a preceding menu within the script ? I've a strong feeling that this may not be possible but am posting this in the hope there may be a way.

To explain what I mean: say the user makes a choice against menu-1 which then determines what shows up in menu-2 which follows. If the user selects "done" in menu-2, is there a loop device to bring the user back to menu-1 ?

The script below contains 3 selects - I'd like to be able to revert from the 3rd one back to the 2nd:

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 
1
  • Ugh. The first ar=... one-liner parses ls; this is not recommended at all. And should you insist on parsing ls after all, use preferably ls | cut -f1 -d. instead: way less typing effort. Caveat: Both your and my solutions will also mistake anything following a . (dot) for an extension. For example, a file called invoice.miller.txt will be shown as "invoice", not "invoice.miller". -- Lastly: For first line, to avoid regular files, use find . -maxdepth 1 -type d.CommentedNov 20, 2014 at 10:10

1 Answer 1

1

Use break instead of exit. Note, though, that the menu is not reprinted when returning to a higher menu.

Example:

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 
3
  • Thanks. So how would you handle "returning to a higher menu" ? Your thoughts on that might help a lot.
    – Tom
    CommentedOct 26, 2012 at 16:23
  • @Tom: See the example.
    – choroba
    CommentedOct 26, 2012 at 16:41
  • Thanks: the answer is "no". What about if == BACK && function->(uses stored value of inner)....
    – Tom
    CommentedOct 26, 2012 at 16:59

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.