Bash – Autocomplete Filenames Using Compgen

autocompletebashcompgen

As part of a larger autocomplete function I'm writing, I want to use compgen to generate a list of files. I read the bash manual entries for compgen and complete, and from there I assumed that the option -G "*" would be the solution. I could not get it to work, though: The list of files in the current directory was shown, regardless of my input, i.e.:

$ cmd <Tab>
aa bb cc
$ cmd a<Tab>
aa bb cc
$ cmd aa<Tab>
aa bb cc

Therefore, I tried to debug this by using complete, which supports the same options as compgen, but I got the same result:

$ complete -G "*" cmd
$ cmd a<Tab>
aa bb cc

I also tried complete -o filenames, but this doesn't work either..

Best Answer

I found the answer myself: I have to use the -A action option:

compgen -o filenames -A file ...
complete -o filenames -A file