Debian - o preenchimento automático do apt (não apt-get) não está funcionando

19

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

Andrea
fonte
Alguma coisa funcionou para você?
Lynob 25/07/19
@Lynob Acabei me mudando para o Ubuntu, então não posso ajudá-lo, desculpe.
187 Andrea Andrea

Respostas:

19

O Debian não vem com o 'bash-complete' instalado e ativado.

Para corrigir isso, execute (como root):

apt-get install bash-completion

Então, você tem duas opções. Você pode (1) ativá-lo por usuário ou (2) ativá-lo globalmente.

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

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

    Para experimentá-lo sem sair e fazer login novamente, execute:

    . ~/.bashrc
    

    Ou abra um novo shell. Em seguida, tente usar a conclusão 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ê deseja que ele funcione quando estiver suna conta root, faça o mesmo 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, a .frente /etc/bash_completionnão se refere ao diretório atual, pois possui espaços ao seu redor. Em vez disso, faz com que o conteúdo do arquivo fornecido seja avaliado no shell em execução no momento, em vez de ser executado em um novo subshell. É padronizado aqui.

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

Wyatt8740
fonte
1
Eu já fiz essas etapas, mas isso não ajudou. Só funciona com o apt-get, mas o apt não.
Andrea Andrea
@ Andrea Oh, desculpe, eu não li completamente sua pergunta, eu acho. Eu não estou na minha caixa Debian no momento (no Windows, tudo o que tenho é cygwin, infelizmente), mas vou tentar descobrir isso na minha máquina debian quando voltar para casa.
precisa saber é o seguinte
4

No Debian 9 Stretch, basta editar /etc/bash.bashrc e descomentar:

# 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
4pie0
fonte
3

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

minaev
fonte
Isto é o que eu preciso. Mas a conclusão automática não está funcionando para o apt, depois que eu copiei, renomeei o arquivo apt baixado para / usr / share / bash-complete / completions /. Como fazer dar certo?
klor
O arquivo pastebin.com/PRBMt3an estava no feed de linha do Windows CR LF, por isso não funcionou. Eu tive que converter o formato da linha em avanço de linha Unix LF, então trabalhei depois de iniciar um novo terminal.
klor
Aqui está o arquivo 'apt' com avanço de linha correta: filedropper.com/apt_1
klor
1

Como eu resolvi isso

Eu tive problemas auto de conclusão tentando autocomplete wgetcom apt-get install wg[TAB][TAB]e eu consegui resolvê-lo através da remoção do --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 estão disponíveis somente após a instalação bash-completion.

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

Como cheguei a esse ponto?

Cheguei a esse ponto depois de executar o set -vanterior apt-get install wg[TAB][TAB], que mostrava que o comando executado era:

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-generate, obtive 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.

Ruben Alves
fonte
Era exatamente disso que eu precisava. Obrigado: D
Ceisc 10/01