Erro de sintaxe jogando conclusão do Bash

4

O PROBLEMA:

Digamos que estou tentando mudar para um diretório chamado 'build', que está no diretório em que estou atualmente. Começo:

cd b

Então eu apertei a aba uma vez (sabendo que nenhum outro diretório no atual começa com a letra b ). Espero ver o seguinte, pronto para eu acertar o retorno ou alterar ou aumentar conforme necessário.

cd build

No entanto, no meu netbook que executa o Linux Peppermint 3, descubro que isso aparece quando pressiono o botão da guia:

cd bbash: command substitution: line 74: syntax error near unexpected token 'done'
bash: command substitution: line 74: '            done'

COISAS QUE TENTEI:

  • Eu tentei reinstalar o pacote "bash-completion", mas isso não teve efeito aparente.

  • Eu olhei o arquivo /etc/bash_completion e especificamente na linha 74, mas não vejo nada óbvio lá que precise ser corrigido ( complete -f -X '*.Z' compress znew ). Talvez eu esteja procurando no arquivo errado.

  • Acho que a conclusão de comandos como git , gedit e node funciona bem. Mas tentar preencher automaticamente um nome de arquivo para kate também não funciona.

  • Quando eu executei bash -x para depuração, muito código foi impresso no terminal e isso foi no final (observe o comentário):

    + toks=(${toks[@]-} $(
        compgen -d -- "$quoted" | {
            while read -r tmp; do
                # TODO: I have removed a "[ -n $tmp ] &&" before 'printf ..',
                #       and everything works again. If this bug suddenly
                #       appears again (i.e. "cd /b<TAB>" becomes "cd /"),
                #       remember to check for other similar conditionals (here
                #       and _filedir_xspec()). --David
                printf '%s\n' $tmp
            done
        }
    ))
    bash: command substitution: line 74: syntax error near unexpected token 'done'
    bash: command substitution: line 74: '            done'
    

    Eu tentei adicionar a condicional mencionada de volta, mas isso não teve efeito.

  • Eu tentei remover temporariamente etc/bash_completion.d , mas isso não teve efeito.

  • Já testei complete -p para ver uma lista de conclusões, mas não sei exatamente o que estou procurando.

UMA PLEA FINAL

Estou disposto a sujar as mãos com os scripts de shell, se é isso que leva; Eu posso aprender um pouco mais sobre isso no processo. Eu realmente seria resolvido embora. Qualquer sugestão apreciada.

    
por guypursey 27.10.2013 / 17:46

2 respostas

1

A conclusão do bash é modular; pacotes diferentes fornecem suas próprias extensões de conclusão. Outro pacote provavelmente contém o bug. Experimente mv /etc/bash_completion.d{,.old} e veja se isso corrige isso. Em caso afirmativo, use mv /etc/bash_completion.d{.old,} para movê-lo novamente e, em seguida, mova os arquivos individuais para fora do diretório /etc/bash_completion.d um por um para identificar o arquivo que está causando o problema. (O diretório pode ser chamado de algo ligeiramente diferente no Peppermint.)

    
por 27.10.2013 / 17:50
1

Não posso comentar oficialmente ainda, então vou oferecer uma resposta parcial apontando em outra direção. Você poderia verificar suas ligações de teclas?

$ bind -p | grep -i tab

Encontrei ambientes no passado em que as pessoas decidiram vincular a tecla tab a uma funcionalidade. A outra opção é extrair um shell bash usando o parâmetro "-x", assim:

$ bash -x

Repita o seu teste. Isso acontece também se você usar echo em vez de cd ?

$ echo b <tab>
    
por 07.11.2013 / 17:13