Pular para o conteúdo

Shell script: auto-completion - Como implementar

Dica publicada em Linux / Introdução
danilo danilosampaio
Hits: 8.281 Categoria: Linux Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.


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:

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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

Simples pós-instalação do Debian 9 (Strech)

Adicionar Google Friend Connect no Google Sites

Syslog-ng enviar e-mail Realtime

Configurando um servidor de e-mail colaborativo Zimbra

Consideração sobre a instalação do MPD no Ubuntu 11.04

#1 Comentário enviado por julio_hoffimann em 05/10/2012 - 07:43h
Parabéns Danilo! Ótima dica!

Abraço!

Contribuir com comentário

Entre na sua conta para comentar.