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
.