Como posso criar algo semelhante a um alias, que se expande corretamente para o comando inicial?

4

Eu configurei aliases para apt-get update , apt-get install e assim por diante. Isso é bem conveniente. Mas o que eu realmente gostaria de ter é algo assim:

digite agi TAB vi e liste automaticamente todos os pacotes que começam com vi , como aconteceria ao emitir apt-get install TAB vi .

Será que algo assim seria realizável de alguma forma, talvez escrevendo um pequeno roteiro?

    
por jottr 20.07.2011 / 23:36

2 respostas

4

A conclusão programável do Bash é algo que eu não me incomodei muito, mas acredito que isso fará o que você quiser (o NB assume o bash versão 4.0 ou mais recente. Se você roda o Ubuntu 10.04 ou mais recente, você é bom.):

alias agi='apt-get install'
_agi_completion() { 
    mapfile -t COMPREPLY < <(apt-cache --no-generate pkgnames "${COMP_WORDS[COMP_CWORD]}")
}
complete -F _agi_completion agi

Conclusão programável no manual do bash explica como funciona, embora seja bastante complexo.

    
por geirha 21.07.2011 / 01:25
2

Você precisa adicionar seus aliases aos dicionários de conclusão do shell para que ele saiba o que está sendo concluído para esses comandos. As completações do shell já devem ter funções nomeadas, mas você precisa dizer que elas se aplicam aos seus novos nomes de comandos.

    
por Caleb 20.07.2011 / 23:40