Como permito que o bash preencha caracteres curinga?

10

Se eu tiver um diretório contendo os arquivos

foo.bar.a.cat
foo.bar.a.hat

e digito ls f+ TABo shell bash é preenchido automaticamente ls foo.bar.a.. Se eu digitar ls *bar*+ TAB, gostaria que o preenchimento automático para *bar*.a.. Isso é possível?

Isso é semelhante à pergunta

Como habilitar a conclusão da guia de curingas no bash?

mas a resposta sugerida, "funciona imediatamente para mim", não funciona. Eu também tentei TAB TAB, sem efeito. O comando `` bash --version givesGNU bash, versão 4.2.37 (1) -release (x86_64-pc-linux-gnu) `.

Hooked
fonte

Respostas:

14

Você quer:

inserir-conclusões

ALT* para 'inserir todas as conclusões'

Com isso, um diretório contendo o nome de arquivos 'aa ab ac ad'
ls a*seguido por alt + *seria concluído parals aa ab ac ad

Entrada da página de manual na ligação:

conclusões de inserção (M- *)

Inserir todas as conclusões do texto antes do ponto que teria sido gerado por possíveis conclusões.

glob-expand-word

Em alguns sistemas, o acima não funcionará com caracteres curinga, o seguinte funciona nesses sistemas para mim:

ctrlx, *(uma combinação de dois tempos)

Exemplo: eu preenchi um diretório com:

touch {a,b,c,d,e,f}{1,2,3,4,5,6,7,8,9,0}00{a,b,c,d,f,e}

Em seguida, ls *100*segui por ctrl + x, *, que transforma minha linha de leitura em:

ls a100a a100b a100c a100d a100e a100f b100a b100b b100c b100d b100e b100f c100a c100b c100c c100d c100e c100f d100a d100b d100c d100d d100e d100f e100a e100b e100c e100d e100e e100f f100a f100b f100c f100d f100e f100f

Entrada da página de manual para ligação:

palavra de expansão global (Cx *)

A palavra antes do ponto é tratada como um padrão para a expansão do nome do caminho e a lista de nomes de arquivos correspondentes é inserida, substituindo a palavra. Se um argumento numérico for fornecido, um '*' será anexado antes da expansão do nome do caminho.

Página do Homem

recatado
fonte
Isso não funciona (pelo menos para mim). Criar os arquivos touch aa ab ac ade digitar, ls aseguido de, alt+*fornece a lista, mas não o ls a*faz. Os curingas são o ponto da questão.
Hooked
@ Hooked Isso funciona para mim GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)e GNU bash, version 4.2.0(1)-release (x86_64--netbsd)não GNU bash, version 4.2.45(2)-release (i386-apple-darwin12.2.0). E por trabalhado, quero dizer, arquivado no texto. Vou verificar meus arquivos conf para ver se tenho algo extra.
recatada
Isso é estranho, por que uma coisa tão simples mudaria de versão para versão? Alguma idéia de como habilitá-lo ou é incorporado em tempo de compilação?
Hooked
@Hooked Estou um pouco perplexo também ... Também não no meu Raspberry Pi GNU bash, version 4.2.37(1)-release (arm-unknown-linux-gnueabihf)(raspbian)
recatada
@Hooked Encontrou uma ligação aliterativa que funciona em sistemas onde o primeiro não tinha, para mim.
recatada 21/05
8

Tente adicionar isso ao ~ / .inputrc:

set show-all-if-ambiguous on

show-all-if-ambiguous faz pressionando tab uma vez (em vez de duas vezes) listar todas as conclusões. Também faz com que a primeira guia pressione insira prefixos compartilhados de expressões glob.

$ touch 1.0.{1,2}
$ echo *0* # I pressed tab once here
1.0.1  1.0.2
$ echo 1.0.

glob-complete-word (\ eg) também completaria *0(sem *no final) para 1.0.. Também é concluído, por exemplo, /System/Library/Launch*/*Findepara /System/Library/LaunchAgents/com.apple.Finder.plist.

Se você quiser converter *para 1.0.1 1.0.2no exemplo acima, use um insert-completação (\ e *) ou glob-expandir-palavra (\ Cx *).

Lri
fonte
4

Esse problema é causado por erros no pacote "bash-conclusão".

Quando o pacote não está instalado, o bash faz a conclusão padrão, este é um bom mecanismo de conclusão de nome de arquivo generalizado.

O pacote "bash-complete" deve observar o resto da linha e ser "inteligente" sobre as listas que ele gera. No entanto, não é possível duplicar a expansão "glob" com êxito.

Pessoalmente, acho que o pacote está se esforçando demais e acaba sendo utilizável apenas pelo "usuário mais burro".

Porém, antes de excluí-lo, convém verificar a parte superior do arquivo "/ usr / share / bash-complete / bash_completion" para obter adições úteis ao seu .bashrc para 'ajuste bruto' da conclusão do bash embutido.

BTW: Possui mais de cem erros registrados ... https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=bash-completion

user3710044
fonte
$ Sudo yum erase bash-completion #fixed a questão para mim
user2449151