autocomplete nomes de arquivos usando o compgen

4

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 ...

    
por daniel kullmann 13.12.2011 / 12:48

2 respostas

3

Eu mesmo encontrei a resposta: tenho que usar a opção -A action :

compgen -o filenames -A file ...
complete -o filenames -A file
    
por 13.12.2011 / 13:39
2

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

    
por 09.08.2014 / 15:09