Como eu resolvi isso

Como eu resolvi isso

Estou no Debian Jessie 8.6. Percebi que apt-getobtém o preenchimento automático esperado do bash ao pressionar tab para pacotes e comandos, mas ao tentar usá-lo com aptele não funciona. Lembro-me de usar o xubuntu 16.04 onde funcionava, então acho estranho que não funcione aqui. Existe uma maneira de habilitá-lo para o comando apttambém? Se sim, como?

Responder1

O Debian não vem com o 'bash-completion' instalado e habilitado.

Se você está vindo para o Debian, digamos, de um ambiente Ubuntu, onde ele está pré-instalado e habilitado por padrão, isso pode ser uma fonte de alguma confusão.

Para ativar/'consertar' isso, execute (como root):

apt-get install bash-completion

Então, você tem duas opções. Você também pode:

 1. Habilite-o por usuário para você ou

 2. Habilite-o globalmente.

1. Se você deseja habilitá-lo apenas para o seu usuário, edite ~/.bashrc- adicione o seguinte:

    if [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
    fi

Para experimentar sem sair e entrar novamente, execute:

    . ~/.bashrc

Ou abra um novo shell. Em seguida, tente usar o preenchimento de tabulação com o apt. Esse ponto e espaço no início ( .) é o mesmo que usar a sourcepalavra-chave no bash, mas é mais portátil.

Se você quiser que funcione quando suestiver na conta root, faça a mesma coisa no diretório inicial do root (normalmente /root).

2.Para habilitá-lo globalmente, faça as alterações de (1) no arquivo /etc/bash.bashrc.

Para quem está se perguntando por que isso funciona, o .in front of /etc/bash_completionfaznãorefere-se ao diretório atual, pois possui espaços ao seu redor. Em vez disso, faz com que o conteúdo de um determinado arquivo seja avaliado no shell atualmente em execução, em vez de ser executado em um novo subshell.Aqui é padronizado.

No Bash, isso .pode ser substituído pelo comando source, mas não é padronizado pelo POSIX e é menos portátil, por isso tendo a desviar as pessoas de usá-lo. Nesse caso, como é especificamente um programa para estender o bash, em vez de algo que precisa funcionar em um bourne shell ou ksh, você pode ficar à vontade para substituir sourcea legibilidade.

Aliás, esse comportamento (não abrir um sub-shell) é semelhante ao modo como os scripts .BAT do DOS/Windows funcionam normalmente, alterando o estado do shell em que são executados cd. , você não estará nesse caminho quando o script for encerrado, como estaria em um .BAT.

Responder2

No Debian 9 Stretch apenas edite /etc/bash.bashrc e descomente:

# enable bash completion in interactive shells
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

Responder3

Como eu resolvi isso

Tive problemas de preenchimento automático ao tentar completar automaticamente wgete apt-get install wg[TAB][TAB]consegui resolver removendo o --no-generateparâmetro das moscas abaixo:

/usr/share/bash-completion/completions/apt-cache
/usr/share/bash-completion/completions/apt-get

Vale ressaltar que esses arquivos ficam disponíveis somente após a instalação bash-completion.

O --no-generateparâmetro ao qual me refiro pode ser visto na linha abaixo, mas removi ALL --no-generate, não só desta linha: https://github.com/scop/bash-completion/blob/master/completions/apt-get#L28

Como cheguei a este ponto?

Cheguei a este ponto depois de executar set -vo anterior apt-get install wg[TAB][TAB], que mostrou que o comando executado foi:

apt-cache --no-generate pkgnames wg

e a saída foi um erro:

E: Could not open file  - open (2: No such file or directory)

Quando executei apt-cache pkgnames wgsem o --no-generateobtive corretamente a lista para preenchimento automático:

root@484f5c8f56ba:/# apt-cache pkgnames wg
wgalician-minimos
wget2
wgaelic
wget
wgerman-medical
wget2-dev

Espero que isto ajude.

Responder4

Copie este arquivo de configuração do Ubuntu: /usr/share/bash-completion/completions/apt para o mesmo diretório em Jessie. Você também pode obter o arquivo aqui:http://pastebin.com/PRBMt3an

informação relacionada