Conclusão da guia bash personalizada

30

Eu tenho meu utilitário de console personalizado cooltool com lista de opções

fooOption
barOption

O que devo fazer para habilitar o bash a autocompletar as opções pressionando a tecla tab ?

Quero dizer, o usuário digitou

$ ./cooltool foo_

depois, pressionado tab . E então

$ ./cooltool fooOption _

apareceu.

    
por Wuffers 27.05.2011 / 18:18

5 respostas

2

Escreva um script de conclusão bash para cooltool . O pacote bash-completion vem com scripts para muitos programas populares, que você pode usar como exemplos.

    
por 27.05.2011 / 19:09
38

A maneira mais simples é adicionar o seguinte ao seu .bashrc.

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

Sempre que você digitar cooltool f[TAB][TAB] , a função _cooltool() será chamada. Ele irá descobrir qual é a sua palavra parcial atual e, em seguida, compgen descobrirá quais opções correspondem. Estes são armazenados em uma matriz chamada COMPREPLY , que é então exibida. Veja man complete e man compgen para detalhes.

Para um bom tutorial, confira: Escrevendo sua própria função de conclusão do bash

    
por 27.05.2011 / 18:25
8

Você pode querer dar uma olhada mais de perto em seu diretório /etc/bash_completion.d em seu sistema.

Além disso, você deve ler esta introdução . A segunda parte da introdução é a que você precisa.

    
por 27.05.2011 / 18:22
2

Além da resposta do dogbane, você também pode fazer:

complete -W "fooOption barOption" cooltool

se você quiser simplesmente corresponder uma lista de palavras do início da string. Parece que completo e compgen compartilham a maioria das opções. Eu só notei o "início da string" correspondente nos comandos que eu uso, então eu achei legal que você pudesse fazer outras coisas na função _cooltool como:

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

para corresponder em qualquer lugar no nome da opção.

    
por 04.01.2017 / 07:29

Tags