You need to provide the user with a list of options to choose from and you don’t want to make them type any more than necessary.
Use bash’s built-in select
construct to generate a menu, then have the user choose by typing
the number of the selection:
# cookbook filename: select_dir directorylist="Finished $(for i in /*;do [ -d "$i" ] && echo $i; done)" PS3='Directory to process? ' # Set a useful select prompt until [ "$directory" == "Finished" ]; do printf "%b" "a Select a directory to process: " >&2 select directory in $directorylist; do # User types a number which is stored in $REPLY, but select # returns the value of the entry if [ "$directory" == "Finished" ]; then echo "Finished processing directories." break elif [ -n "$directory" ]; then echo "You chose number $REPLY, processing $directory..." # Do something here break else echo "Invalid selection!" fi # end of handle user's selection done # end of select a directory done # end of until dir == finished
The select
function makes it
trivial to present a numbered list to the user on STDERR, from which
they may make a choice. Don’t forget to provide an “exit” or “finished”
choice.
The number the user typed is returned in $REPLY
, and the
value of that entry is returned in the variable you specified in the
select
construct.
help select
help read
3.145.151.26