A conclusão da tabulação não funciona para comandos

44

Estou tentando usar a conclusão de tabulação para comandos no Ubuntu 11.04 Beta 1, executando todas as atualizações mais recentes, mas parece que não funciona. (Embora o pacote bash-completion esteja instalado)

A conclusão de tabulação funciona corretamente apenas para diretórios ou arquivos.

Alguma ideia de onde cavar?

    
por Screatch 04.04.2011 / 11:32

5 respostas

58

Verifique se você tem o seguinte fragmento no seu .bashrc (deve estar lá por padrão)

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi
    
por Adam Byrtek 04.04.2011 / 12:23
11

Eu também gostaria de acrescentar a seguinte explicação adicional para uma falha na conclusão do bash - é muito longo para um comentário e pode ser útil para alguém que tem um problema com a conclusão do bash, já que presumivelmente esse é o canônico 'geral' pergunta para a qual todas as duplicatas são referidas.

Mesmo que você tenha a linha apropriada em .bashrc (como na resposta acima) e o pacote bash-completion instalado, a conclusão do bash ainda poderá falhar se você tiver shopt -s nullglob ou shopt -s failglob no seu .bashrc ou .bash_aliases .

Os cenários a seguir foram testados com todas as personalizações de .bashrc e .bash_aliases removidas para dar um teste justo, com a linha de conclusão bash apropriada em .bashrc present e com bash-completion instalado.

1) O primeiro cenário é quando você tem shopt -s failglob no seu .bashrc ou .bash_aliases .

Ao tentar listar diretórios e arquivos completos, respectivamente, esses erros ocorrerão:

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

No entanto, os comandos ainda serão concluídos com êxito.

2) Com shopt -s nullglob habilitado, a tentativa de tabular um diretório completo ou um arquivo levará a tudo listado, sem conclusão:

cd Do
.adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .pulse/
............

Interrompi a listagem aqui, pois era muito longa e não era necessário reproduzir tudo.

Mais uma vez, a conclusão do comando continuará a funcionar no entanto.

Portanto, apenas remover shopt -s failglob ou shopt -s nullglob também pode resolver o problema de erros com a conclusão do bash, supondo que você tenha a linha apropriada em .bashrc e bash-completion instalado.

    
por user76204 24.12.2012 / 16:38
8

Além de modificar o arquivo /etc/bash.bashrc (outras respostas), talvez seja necessário instalar bash-completion package.

Verifique se exsits do arquivo /etc/bash_completion . Se não:

sudo apt-get install bash-completion

(Na minha instalação do Debian 7 ele não foi instalado inicialmente)

    
por SergeanT 07.09.2015 / 13:58
6

Por mais básico que pareça, certifique-se de que o bash é o seu shell ativo

echo $SHELL

Acabei de atualizar para o Ubuntu 14.04.1 LTS e não tive nenhuma conclusão automática de tabulação, mesmo depois de seguir os conselhos neste post, apenas para perceber que meu shell estava definido como /bin/sh e não /bin/bash .

    
por nocdib 19.11.2014 / 16:35
1

Atualizando para o Ubuntu 14.04.01

Verifique se você tem o seguinte fragmento no seu .bashrc (deve estar lá por padrão)

sudo vim /etc/bash.bashrc (digite "i" para editar o arquivo)

    # 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

Remova o comentário de 7 linhas acima

Salvar o arquivo "esc + w + q + enter"

Reinicie o bash

exec bash

    
por Diego Arriola 02.09.2014 / 21:25