Como expandir * na linha de comando do Bash

30

Compreendo que, se você digitar ls * , ele será realmente expandido para ls a b c quando a corrente tiver arquivos diretamente a , b e c .

Eu queria saber se existe uma maneira de expandir isso antes de eu apertar enter. Semelhante a como Ctrl + X funciona, ou guia completa funciona.

Então, para deixar claro

$ ls *
<press magic key>
$ ls a b c

de maneira semelhante a:

$ ls ~/
<press tab>
$ ls /home/username

Eu pensei que tinha visto isso antes, mas eu poderia estar enganado.

    
por bramp 28.11.2010 / 20:12

5 respostas

17

Você pode usar a função glob-expand-word , do man bash :

The word before point is treated as a pattern for pathname
expansion, and the list of matching file names is inserted,
replacing the word. If a numeric argument is supplied, an
asterisk is appended before pathname expansion.

Adicione algo assim ao seu ~/.inputrc :

Control-x: glob-expand-word

Então $ ls * seguido por Ctrl-X expandirá para $ ls a b c , no seu exemplo.

    
por 28.11.2010 / 20:44
19

No bash, o recurso de readline é chamado de glob-expand-word e está limitado a Ctrl X * por padrão.

    
por 28.11.2010 / 20:45
9

Quando você está no modo vi ( set -o vi ), a "chave mágica" é Esc * . Isso funciona com bash e ksh .

    
por 29.11.2010 / 09:57
3
$ bind -q glob-expand-word
glob-expand-word can be invoked via "\C-x*".

$ bind -q insert-completions
insert-completions can be invoked via "\e*".

Então, para usar isso, podemos fazer

ls * Ctrl + x *

ou

ls * Esc *

Expanda linhas complicadas antes de entrar

    
por 21.12.2013 / 04:46
0

Uma alternativa para glob-expand-word (\ C-x *) é insert-completions (\ e *). Ele funciona sem um asterisco no final, mas também inclui outras conclusões, como arquivos ocultos. Eu tenho rebote ambos em ~ / .inputrc:

# insert glob results (\C-x* by default)
"\C-g": glob-expand-word

# insert completion list (\e* by default)
"\ei": insert-completions

glob-complete-word (\ eg) pode ser usado para converter, por exemplo, /System/Library/Launch*/*Finder para /System/Library/LaunchAgents/com.apple.Finder.plist .

    
por 21.05.2013 / 21:44