como obter o bash para parar de escapar $ durante a conclusão da tabulação?

30

Eu tenho isso na linha de comando:

 ln -sf $PWD/wine-

e depois eu bato tab para completar o nome do arquivo. Nas versões anteriores do Ubuntu, isso funcionava muito bem para completar o nome do arquivo wine- (e como um efeito colateral $ PWD seria expandido naquele momento). Mas agora ele se transforma em

 ln -sf \$PWD/wine-

que não é o que eu quis dizer e não completa nada, pois o arquivo não inicia literalmente com $ .

Como faço para concluir o comportamento menos fragmentado?

set diz-me que estas são as minhas configurações atuais:

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
    
por keturn 22.10.2011 / 20:06

5 respostas

24

Descobri que versões bash > = 4.2.29 ter uma nova configuração de direxpand shopt. (Veja man docs/bash.1 se você verificar uma nova bash, ou veja bash.1 da linha 8951 )

Se alguém usar o Quetzal Quantal 12.10 ou, de outra forma, se apoderar de (ou fizer check-out e construir) uma nova bash, então:

shopt -s direxpand

Me dá o comportamento que eu quero, preciso e amo.

Solução alternativa: Enquanto isso, CTRL-ALT-e em vez de guia faz o que eu quero também. Mas é estranho.

BTW, existem vários tópicos chamados bash tab variable expansion question? em gnu.bash.bug . Ao lê-las, encontrei as informações aqui.

    
por Peter V. Mørch 14.05.2012 / 06:23
2

pesquise _filedir() no script bash_completion de nível superior e altere a linha

compopt -o filenames 2>/dev/null

para

compopt -o filenames -o noquote 2>/dev/null
    
por mba 19.03.2015 / 22:11
1

Para quem (como eu) com 12.04 pode usar ~ + ao invés de $ PWD ...

por exemplo:

cd /bin
echo ~+/ls
/bin/ls
    
por Tony 01.12.2012 / 04:39
1

Mesmo com o bash atualizado, descobri que $ ainda escapou.

  • Removendo o pacote bash-completion (1:2.1-3.fc20)
  • ou simplesmente não fornecer /etc/bashrc de ~/.bashrc pareceu corrigir o problema.

Eu suspeito que agora vou sentir falta de alguns recursos que normalmente estou acostumado, mas ainda não notei nenhum.

Alternativa (pelo menos para o Fedora 26), adicione export BASH_COMPLETION_VERSINFO=0 antes de obter /etc/bashrc . Isso faz com que o script problemático pense que já foi originado.

    
por jozxyqk 09.10.2014 / 11:25
0

Eu encontrei o mesmo problema com o Bash no Cygwin. Corrigi meu problema definindo a seguinte opção.

shopt -s cdable_vars

link

    
por mig 12.04.2016 / 19:32