Eu mesmo encontrei a resposta: tenho que usar a opção -A action
:
compgen -o filenames -A file ...
complete -o filenames -A file
Como parte de uma função autocomplete maior que estou escrevendo, desejo usar o compgen para gerar uma lista de arquivos. Eu li as entradas manuais do bash para compgen
e complete
, e a partir daí assumi que a opção -G "*"
seria a solução. Eu não consegui fazê-lo funcionar, no entanto: A lista de arquivos no diretório atual foi mostrada, independentemente da minha entrada, ou seja:
$ cmd <Tab>
aa bb cc
$ cmd a<Tab>
aa bb cc
$ cmd aa<Tab>
aa bb cc
Portanto, tentei depurar isso usando complete
, que suporta as mesmas opções que o compgen, mas obtive o mesmo resultado:
$ complete -G "*" cmd
$ cmd a<Tab>
aa bb cc
Eu também tentei complete -o filenames
, mas isso não funciona ...
Como alternativa, você pode usar o preenchimento automático padrão para nomes de arquivos com
# at the top of the function to disable default
compopt +o default
# and where you need filename completion, re-enable it and send empty COMPREPLY
compopt -o default
COMPREPLY=()
return 0
com base no link
Tags bash autocomplete compgen