Shell script: auto-completion - Como implementar

Publicado por danilo em 03/10/2012

[ Hits: 7.279 ]

 


Shell script: auto-completion - Como implementar



Ao digitar um comando no terminal, você também já deve ter feito uso da facilidade de teclar o TAB para que o Bash completasse o comando, ou argumento para você. Essa função é uma mão na roda.

Bash Completion

O Bash é um dos mais populares Shell do mundo GNU/Linux, e por isso, meu exemplo será feito com base em seus conceitos.

Este ambiente é preparado pelo script /etc/bash_completion. Este script prepara o completion com uma série de comandos pré-configurados.

Uma forma de fazer com que o bash_completion configure os comandos criados por você, é criando um script no diretório /etc/bash_completion.d/ em um padrão definido.

Exemplo: Digamos que você criou um comando chamado ola, que possui as seguintes opções:
  • --help
  • --message
  • --version

O completion do seu comando, seria algo assim:

_ola() {
    local cur prev opts
       COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="--help --message --version"

    if [[ ${cur} == -* ]] ; then
          COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
          return 0
    fi
  }
  complete -F _ola ola


Entendendo o código da função

Na linha 2, a função define três variáveis:
  • cur → Atual palavra digitada;
  • prev → Palavra anterior digitada;
  • opts → Opções disponíveis para o comando.

Na linha 8, verifica se o usuário digitou ' - ', e mais qualquer outro texto. Caso sim, a função 'compgen' compara o texto informado com as opções(opts):

compgen -W "${opts}" -- ${cur}


Setando o resultado das opções que correspondem com o texto informado na variável "$COMPREPLY":

Linha 9.

COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )


Entendendo um pouco mais sobre as variáveis especiais do Bash usadas nessa função:
  • COMPREPLY → Um array, de onde o bash lê possíveis sugestões de completions;
  • COMP_WORDS → Um array de palavras digitadas na linha de comando atual;
  • COMP_CWORD → É o índice que aponta para a palavra atual do array COMP_WORDS.

No final, é feita a associação da função "_ola" com o seu script ola, através do comando: complete -F _ola ola.

Este comando registra o completion do seu comando no ambiente do Bash.

Não encontrei muitas referências completas, mas achei essa bem simples e fácil de entender:

Outras dicas deste autor

GNU parallel - Um ferramenta para execução de processos em paralelo

Leitura recomendada

Entendendo o DHCP de forma simples

Criar áreas de trabalho - Ubuntu + Compiz

Configurando Hugepages

Corrigindo problema do OpenVPN no Ubuntu 10.04

Criando um Servidor PHP local no Android

  

Comentários
[1] Comentário enviado por julio_hoffimann em 05/10/2012 - 07:43h

Parabéns Danilo! Ótima dica!

Abraço!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts