Eu tenho um monte de scripts de conclusão do bash configurados (principalmente usando o bash-it e algumas configurações manualmente).
Eu também tenho um monte de aliases configurados para tarefas comuns como gco
para git checkout
. No momento, eu posso digitar git checkout d
Tabe develop
está completo para mim, mas quando digito, gco d
Tabele não está completo.
Estou assumindo que isso ocorre porque o script de conclusão está sendo concluído git
e ele falha ao ver gco
.
Existe uma maneira de obter generosa / programaticamente todos os meus scripts de conclusão para trabalhar com meus aliases? Não poder concluir quando o tipo de alias é derrotado pelo objetivo do alias.
bash
tab-completion
dstarh
fonte
fonte
bash --version
para obter isso (não use-v
, saída diferente).ll --[TAB]
, imprimirá uma lista de opções parals
? Sou bastante cético quanto a isso, mas se você tem certeza de que tal coisa existia na 11.10, ficaria curioso para investigar e determinar o que foi removido.Respostas:
O código a seguir, adaptado desta resposta do Stack Overflow e deste tópico de discussão dos Fóruns do Ubuntu , adicionará conclusões para todos os seus aliases definidos:
Para aliases simples (apenas comando, sem argumentos), ele atribuirá a função de conclusão original ao alias; para aliases com argumentos, ele cria uma função de wrapper que insere os argumentos extras na função de conclusão original.
Diferentemente dos scripts dos quais ele evoluiu, a função respeita aspas tanto para o comando alias quanto para seus argumentos (mas o primeiro precisa corresponder ao comando de conclusão e não pode ser aninhado) e deve filtrar com segurança aliases para listas de comandos e pipes (que são ignorados, pois é impossível descobrir o que concluir neles sem recriar a lógica completa de análise de linha de comando do shell).
Uso
Salve o código como um arquivo de script de shell e origine- o ou copie a função atacada para
.bashrc
(ou seu arquivo de ponto pertinente ). O importante é chamar a função depois que as definições de conclusão e alias do bash tiverem sido configuradas (o código acima chama a função logo após a sua definição, no espírito "fonte e esqueça", mas você pode mover a chamada para qualquer lugar a jusante, se isso combina melhor com você). Se você não quiser a função em seu ambiente após a saída, poderá adicioná-launset -f alias_completion
após chamá-la.Notas
Se você estiver usando o
bash
4.1 ou superior e usar conclusões carregadas dinamicamente, o script tentará carregar conclusões para todos os comandos com alias, para que ele possa criar as funções do wrapper para seus alias.fonte
~/.bashrc
. Armazene-o como um arquivo de script de shell e origine-o (. /path/to/alias_completion.sh
) ou copie e cole o código por atacado./usr/share/bash-completion/completions/
eles são carregados apenas na primeira vez em que o usuário realmente acessa[TAB]
. Portanto, mesmo que a função seja carregada,~/.bashrc
ela não gerará conclusões para aliases para comandos nela. Após assegurarcomplete -p
está trabalhando paraapt-get
eapt-cache
eu copiar-colar a sua função para o terminal e ele está funcionando corretamente./tmp
para~/.bash_completion
e adicionei manualmente, no início, assource /usr/share/bash-completion/completions/
entradas relevantes (separadamente paraapt-get
eapt-cache
-apt-{cache,get}
não funciona).Sim, aqui está o projeto de alias completo que resolve seu problema exatamente. Ele fornece a conclusão de alias genérica e programática sem o uso
eval
.fonte
Esta é a maneira manual, para quem está procurando por isso.
Primeiro, procure o comando de conclusão original. Exemplo:
Agora adicione-os ao seu script de inicialização (por exemplo, ~ / .bashrc):
fonte: https://superuser.com/a/1004334
fonte