De onde vêm as funções de conclusão do bash?

De onde vêm as funções de conclusão do bash?

Eu tenho um Raspberry Pi rodando Raspbian (Debian Wheezy). Entrei setem um terminal e fiquei surpreso com a longa lista. Parece ser quase inteiramente funções git - cerca de 3.700 linhas delas.

__git_all_commands=
__git_diff_common_options=$'--stat --numstat --shortstat --summary\n\t\t\t--patch-with-stat --name-only 
...

Minha pergunta é: como eles chegaram lá e por quê?

Ocasionalmente, costumava gitreceber pacotes.

Eu verifiquei todos os suspeitos do costume /etc/profile, /etc/bash.bashrc, .bashrc,.profile


Encontrei um script /etc/bash_completion.d/git(nunca tinha ouvido falar de bash_completion antes). Eu tenho que fazer mais alguns estudos para descobrir o que isso faz e exatamente onde é chamado.

Eu ainda preciso descobrirPOR QUEEu gostaria de executar isso em todos os shells de login quando uso apenas gituma ou duas vezes por ano. (O Raspberry Pi não é exatamente dotado de RAM). Isso não parece acontecer no meu Mac.

Responder1

Essas funções fazem parte do suporte de conclusão do shell para git. Eles são mantidos como parte do software Git. O Debian (no qual o Raspbian é baseado) distribui a configuração de conclusão do bash no gitpacote. As funções estão localizadas em /etc/bash_completion.d/git, no mesmo diretório que outro suporte de conclusão de comando para bash.

Todos os arquivos /etc/bash_completion.dsão carregados como parte da configuração da conclusão programável do bash, em /etc/bash_completion. .bashrcCargas padrão do Debian /etc/bash_completion, você pode editá-lo se não quiser nenhuma conclusão específica de comando.

Se você nunca usa git, remova o gitpacote. Se você tiver o gitpacote instalado, provavelmente você às vezes executa o gitcomando e, portanto, deseja ter uma boa conclusão para ele. “Eu raramente uso o git e quero economizar alguns kilobytes de RAM” é uma distinção muito tênue, mesmo para o Debian.

Se quiser pular esse arquivo de conclusão, mas usar outros, você podedesviaro arquivo para um nome que faça com que ele seja ignorado por /etc/bash_completion. Desviar um arquivo é uma forma de instruir o gerenciador de pacotes para aplicar atualizações e remoções a um arquivo localizado em um local diferente.

dpkg-divert --add --local --rename --divert /etc/bash_completion.d/git.dpkg-diverted /etc/bash_completion.d/git

Responder2

Existem scripts globais e por usuário que são incluídos no login ( /etc/profile, $HOME/.profile, $HOME/.bash_profile, $HOME/.bash_login).

Na maioria das distros, o conteúdo de algum diretório (como /etc/env.d/*ou algo semelhante) geralmente é incluído pelo script global, onde os pacotes podem colocar seus próprios scripts de configuração de ambiente que são originados a cada login.

informação relacionada