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
ar=...
one-liner parses ls; this is not recommended at all. And should you insist on parsing ls after all, use preferablyls | 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, usefind . -maxdepth 1 -type d
.