Editar: OK. Parece que eu poderia ter interpretado mal a situação. Pensei que você queria dizer as opções do programa como em:
$ mplayer_alias -pla<tab><tab>
-playing-msg -playlist
$
mas acho que é a conclusão do arquivo. Eu não sei, mas tente.
Como solução rápida, isso deve funcionar:
complete -f -o default ee
Dando:
$ ee<tab><tab>
file1 file2 file3
$
a partir de Builtins de Conclusão Programável . Por exemplo. o -X pattern
pode ser útil. Por exemplo. para excluir .swp
e .swo
arquivos:
complete -f -X '*.sw[op]' ee
mostre apenas .zip
, .ZIP
:
complete -f -o default -X '!*.+(zip|ZIP)' my_unzip_alias
alguns podem precisar que você adicione shopt -s extglob
no arquivo de configuração.
Resposta antiga:
Você poderia experimentar algo assim em seu .bash_completion
.
Pelo menos como um iniciante.
A ideia principal é simplesmente adicionar complete
para o alias usando o existente
script completo para o programa real . Aqui eu suponho que eles estão todos no formato:
complete -F _complete_function_from_original program_name
Você pode obter o que é executando: complete -p program_name
. Melhor verificar primeiro.
Para alguns métodos, como apt-get
, é possível usar somente alias + load:
_load_comp_hack apt-get myalias
Para outras pessoas, como mplayer
, é necessário um wrapper de função, como, por exemplo:
myalias() { mplayer "$@"; }
|
+--- Could be messy
É bem possível que haja uma maneira melhor de resolver isso, mas funcionou bem para o meu uso. Eu principalmente usá-lo para scripts wrapper onde eu estendo a funcionalidade do programa original. Não o usei em aliases.
Eu não me sinto seguro neste hack, mas você pode ver se funciona.
_load_comp_hack()
{
local cc=
# Make sure completion scripts are sourced.
# Report error if source fail.
if . "/usr/share/bash-completion/completions/$1" >/dev/null 2>&1; then
# Extract the completion function used by the "real" program.
if cc="$(complete -p "$1" | cut -d' ' -f3)"; then
# Add it to the alias
complete -F "$cc" "$2"
return 0
fi
fi
echo "bash-completion '$1' for '$2' not found."
}
_load_comp_hack mplayer mplad
_load_comp_hack apt-get z
| |
| +----- Alias, script or function
+------------- Real function
Alguns programas usam uma conclusão mais geral, como _longopt
, pela qual o
o arquivo de origem não será localizado. Normalmente, não é necessário
variante mais simples poderia ser:
_load_comp_hack()
{
local cc=
if cc=$(complete -p "$1" | cut -d' ' -f3); then
complete -F "$cc" "$2"
fi
}
Um problema aqui, o IIRC, é que alguns scripts de conclusão não são carregados até a primeira execução, como no primeiro:
prog
aba aba . Como alternativa, talvez inclua-o como else
se o fornecimento do arquivo falhar.