Como as ferramentas de linha de comando têm sua própria lista de preenchimento automático?

24

Como o Bash no Ubuntu conhece a lista específica de ações de uma ferramenta?

Por exemplo, se eu digitar apt-get e tab duas vezes, vejo apenas remover, atualizar, atualizar ... etc, mas não as ações de outro comando ou os arquivos no diretório atual.

Estou desenvolvendo uma ferramenta de linha de comando no Go e gostaria de fornecer esse recurso para as distribuições que o suportam.

Amged Rustom
fonte
11
Eu removi o "ubuntu" do seu título e tags, pois isso é melhor como uma pergunta mais geral (a resposta não é específica para nenhuma distribuição).
Goldilocks
11
Ótima pergunta, eu sempre me perguntei isso, mas nunca tirei um tempo para procurar.
Akatakritos

Respostas:

25

Faz isso usando os recursos de conclusão do bash v4. O código de conclusão para apt-geté fornecido pelo bash-completionpacote e localizado em /usr/share/bash-completion/completions/apt-get. Os aplicativos que têm conclusão e não fazem parte do bash-completionpacote base inserem seus scripts de conclusão /etc/bash_completion.d.

As conclusões são carregadas via sourcing /etc/bash_completion. Exatamente onde isso é feito irá variar dependendo das versões do Debian ou Ubuntu. Isso, por sua vez, fornecerá tudo em /usr/share/bash-completion/completionse /etc/bash_completion.d.

jordanm
fonte
Obrigado, isso explica. Então a implementação não varia apenas do Debian para o Ubuntu, mas também em cada versão da mesma distribuição?
Alterado Rustom
11
@Amgad Funciona da mesma maneira em todas as distribuições. As únicas diferenças são onde os arquivos estão localizados e talvez algumas configurações padrão.
Gilles 'SO- stop being evil' (