Eu preciso dos nomes de diretório em / mailman / lists para concluir a tabulação como um argumento (sem barras) no comando 'list_members', independentemente de onde eu esteja no sistema de arquivos.
No tcsh (no nosso servidor antigo), escrevi uma linha para fazer o que precisava:
complete list_members 'p,*,F:/mailman/lists,,' #tcsh
A implementação do
bash parece ser mais complexa. Como posso implementar esse mesmo comportamento usando o bash?
A conclusão da tabulação precisa ser sensível ao contexto para que qualquer parte do argumento que eu já tenha digitado reduza a pesquisa, assim como a conclusão padrão do bash. Exemplo:
list_members sys<TAB> #only shows names beginning with sys
Eu tentei algumas soluções depois de ver exemplos, mas elas não funcionam corretamente.
Um exemplo com falha:
function _listlists()
{
COMPREPLY=( $( compgen -C 'ls /mailman/lists' ) )
}
complete -F _listlists list_members
Qual produz o erro:
-bash: compgen: warning: -C option may not work as you expect
Outro exemplo falho:
function _listlists()
{
cd /mailman/lists
COMPREPLY=( $( compgen -d ) )
cd -
}
complete -F _listlists list_members
Isso mostra todos os resultados desse diretório canalizados para 'more', mas não responde ao argumento parcial que eu já digitei.
Obrigado.