Como inline expandir padrão de glob contendo classe de caractere?

1

Me deparei com essa pergunta em um tente procurar uma maneira de expandir meu padrão glob no bash. Mas no meu caso o padrão contém alguma classe de caracteres.

Digamos que eu tenha 3 arquivos: - abc bbc 1bc

Quando eu digito:

$> somecommand [[:alpha:]]bc

Gostaria de saber se existe alguma combinação de teclas que expandisse meu comando inline como:

$> somecommand abc bbc

Eu tentei a sequência de teclas Ctrl+X * sem sorte. Parece que ele está funcionando apenas para um padrão glob simples, mas falha ao expandir quando um padrão contém alguma classe de caractere como [[:alpha:]]

    
por onelaview 03.11.2018 / 11:50

1 resposta

1

Isso porque : está entre a lista de caracteres que readline considera como delimitadores de palavras para a conclusão de palavras (que bash expõe na variável $COMP_WORDBREAKS shell).

Depois:

COMP_WORDBREAKS=${COMP_WORDBREAKS/:}

(para remover : de $COMP_WORDBREAKS ), Ctrl + X * deve funcionar.

Alguém poderia argumentar que : não deveria estar nessa lista em primeiro lugar pela mesma razão que é usada em classes de caracteres, mas eu suponho que a lógica é que você quer ser capaz de usar a conclusão em coisas como :

PATH=~/bin:/usr/locTab

E esse mecanismo é muito grosseiro (você notará que Ctrl + X * em 'a'* não funciona nem mesmo se você remover ' de $COMP_WORDBREAKS ) para acomodar ambos, é um compromisso. Veja zsh , um shell com recursos de edição muito mais avançados, que funciona nos dois casos aqui.

    
por 03.11.2018 / 12:42