Como configurar o autocompletar bash para lidar com nomes de arquivos como “./foo=bar/x=y.txt”?

2

Quando começo a digitar um nome de arquivo que contém um sinal de igual, o preenchimento automático com [tab] mostra um comportamento estranho:

ls ./foo[tab]    # autocompletion to "./foo\=bar"         <- ok
ls ./foo=[tab]   # autocompletion to "./foo=foo\=bar/"    <- not ok

Existe algo que eu possa colocar no .bashrc para controlar esse comportamento ou alterar alguns scripts de autocompletar em / etc?

bash --version
GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)
    
por Pavel 03.05.2016 / 11:35

1 resposta

3

Provavelmente não. Ou, pelo menos, será realmente complexo. O problema aqui é que foo= é interpretado pelo bash como uma tentativa de definir a variável foo para algo. Então, quando você clicar na aba , ela tenta completar os nomes dos arquivos no diretório atual. Na verdade, ele não está completando foo= , está iniciando um novo globo a partir do nada. Observe que são necessárias duas guias para concluir foo= .

Para ilustrar, você pode ver o mesmo comportamento, mesmo que não haja arquivos que comecem com foo= :

$ ls
bar  baz

Digitar foo= e pressionar a tecla Tab resulta em:

$ foo= ## first tab does nothing
$ foo= 
bar          baz  ## both file names are printed. 

Eu duvido que haja alguma maneira de contornar isso, já que esta é uma função básica do shell e a principal maneira de definir variáveis.

Eu posso pensar em duas soluções alternativas. Ou escape do = :

$ ls foo\=  ## hit tab
$ ls foo\=bar 

Ou use aspas:

$ ls 'foo=     ## hit tab
$ ls 'foo=bar' ## yes, the final quote is added by the shell. 

Acionar a aba agora expandirá o nome do arquivo corretamente.

    
por terdon 03.05.2016 / 19:35