I have a simple bash completion script that essentially invokes my (non-bash) program and set its output to COMREPLY
, i.e.
COMPREPLY=( $(my-program -- "${COMP_WORDS[@]}") )
Some of the options accept comma separated value, is there a way to handle suggestion only for the last item? Let's say the user types -v opt1,opt2,o<TAB><TAB>
, let's say my program finds out the the valid options at this point are opt3
or opt4
. If I just return those 2 and press TAB the output changes to just o
(entire prefix gone). It works if I return opt1,opt2,opt3
and opt1,opt2,opt4
, but that doesn't look nice.
Possible solution is to do something like Bash completion for comma-separated values, that is, invoke my-program
to generate [opt3, opt4]
, and pass that as word list to compgen
with opt1,opt2,
as prefix. But that requires duplicating some logic in the bash script as in my-program
. Is there a better way?