Você precisa filtrar a lista pelo argumento atual, então:
COMPREPLY=( $(compgen -W "$(ls ~/Special)" -- "$2") )
Suponha que eu tenha uma função bash specialcat
que cat
s um arquivo no diretório ~ / Special
specialcat () {
cat ~/Special/$1
}
Suponha que o diretório ~ / Special foi configurado da seguinte forma:
mkdir ~/Special
echo This is the first special file > ~/Special/firstfile
echo This is the second special file > ~/Special/secondfile
A função specialcat é usada como:
> specialcat firstfile
This is the first special file
Eu quero ativar a conclusão do argumento para que
> specialcat firstf[TAB]
produz
> specialcat firstfile
, independentemente de qual seja o diretório de trabalho atual e de quais arquivos estão lá.
Esta é minha tentativa até agora
_options_specialcat () {
COMPREPLY=( $(compgen -W "$(ls ~/Special)") )
}
complete -F _options_specialcat specialcat
que leva a
> specialcat firstf[TAB]
firstfile secondfile
> specialcat firstf
Ou seja, pressionar a tecla tab em um nome de arquivo parcial exibirá a lista de arquivos, mas não concluirá o comando.
Como altero minha função _options_specialcat
para produzir o comportamento desejado?
Tags bash autocomplete compgen