Como consertar o bash-completion corrompido na substituição de comandos? [duplicado]

3

parece que meu bash-completion foi corrompido. Toda vez que tento usar a substituição de comandos, por exemplo, quando digito

ls $(ls Deskto<Tab>

.. o resultado é ..

ls $(ls Desktobash unexpected eof while looking for matching ")".

Eu tentei remover meu arquivo .bashrc e cp /etc/skel/bashrc ~/ para obter um novo. Isso funciona até eu adicionar algo no meu novo bashrc. Mesmo quando eu faço echo '#" >> ./.bashrc ele quebra novamente. Remover meu bash_aliases também não ajudou.

Além disso, sudo apt-get install --reinstall bash-completion não fez o truque. No entanto, existem alguns tópicos sobre problemas semelhantes, nada funciona.

QUALQUER sugestão será muito apreciada! :)

    
por loomingShade 25.10.2014 / 22:18

3 respostas

2

Seu bash-completion não está realmente "corrompido" - isso é simplesmente um bug conhecido com o bash-completion 2.1 e o Bash 4.3.

Recentemente respondi uma questão relacionada no AskUbuntu e mais uma vez aqui, , mas já que estou no assunto também vou responder aqui para que as pessoas pesquisando esse problema encontrem a resposta aqui também.

Eu dei mais detalhes no AskUbuntu , mas essencialmente, para consertá-lo, você pode:

  1. Substituir

    [[ ${!2} == \$* ]] && eval $2=${!2}
    

    com

    [[ ${!2} == \$\'* ]] && eval $2=${!2}
    

    na função _quote_readline_by_ref no arquivo /usr/share/bash-completion/bash_completion (não recomendado); ou

  2. Confira a mais nova versão do Git da biblioteca de conclusão do bash e use isso - o bug parece para ser corrigido nesta versão.

Você não conseguirá concluir a tabulação dentro da substituição de comando, trabalhando novamente com qualquer uma dessas soluções, mas, pelo menos, você não verá mais essa mensagem de erro.

Para realmente obter a conclusão da tabulação dentro do trabalho de substituição de comandos, você terá que reverter para uma versão anterior do Bash ( onde eu ouço que estava funcionando ), ou aguarde a biblioteca realmente corrigir esse problema com o Bash 4.3.

    
por 23.01.2015 / 17:55
1

Primeiro, eu procuraria /etc/bash_completion . Parece que

. /usr/share/bash-completion/bash_completion

(não perca o . no início da linha) Se não ajudar, tentarei encontrar todos os links em arquivos bash

find / -name *bash* -type f -exec grep -l completion {} \+ 2>/dev/null

e verifique se há erros. Em alguns arquivos deve estar seguindo o código

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
    
por 25.10.2014 / 23:06
1

Uma coisa que pode causar isso é aliasing a palavra-chave local ; evite aliasing de palavras-chave como local , do , done , etc.

    
por 20.06.2018 / 18:14

Tags