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

4

Eu tenho um Raspberry Pi executando o Raspbian (Debian Wheezy). Eu entrei em set em um terminal e fiquei surpreso com a longa lista. Isto parece ser quase inteiramente funções git - ~ 3700 linhas deles.

__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ê?

Eu usei ocasionalmente git para obter pacotes.

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

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

Eu ainda preciso descobrir POR QUE eu gostaria de executar isso em cada shell de login quando eu só uso git uma ou duas vezes por ano. (O Raspberry Pi não é exatamente mais dotado de RAM). Isso não parece acontecer no meu Mac.

    
por Milliways 07.10.2014 / 04:26

2 respostas

2

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 pacote git . As funções estão localizadas em /etc/bash_completion.d/git , no mesmo diretório que o outro suporte de conclusão de comando para o bash.

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

Se você nunca usa o git, remova o pacote git . Se você tiver o pacote git instalado, presumivelmente, às vezes, você executará o comando git e, portanto, desejará ter uma boa conclusão para ele. “Eu só uso raramente o git e quero salvar alguns kilobytes de RAM” é uma distinção muito boa mesmo para o Debian.

Se você quiser pular o arquivo de conclusão, mas usar outros, poderá desviar o arquivo para um nome que faz com que ele seja ignorado por /etc/bash_completion . Desviar um arquivo é uma maneira de informar ao gerenciador de pacotes para aplicar atualizações e remoções em 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
    
por 08.10.2014 / 19:52
0

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 obtidos em cada login.

    
por 07.10.2014 / 05:01