Estou no Debian Jessie 8.6. Percebi que apt-get
obtém o preenchimento automático esperado do bash ao pressionar tab para pacotes e comandos, mas ao tentar usá-lo com apt
ele 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 apt
també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 source
palavra-chave no bash, mas é mais portátil.
Se você quiser que funcione quando su
estiver 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_completion
faznã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 source
a 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 wget
e apt-get install wg[TAB][TAB]
consegui resolver removendo o --no-generate
parâ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-generate
parâ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 -v
o 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 wg
sem 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.
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