Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I understand that if you type ls * it is actually expanded to ls a b c when the current directly has files a, b and c.

I was wondering if there is a way to expand this before I hit enter. Similar to how Ctrl+X works, or tab complete works.

So to make myself clear

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

in a similar way to:

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

I thought I'd seen this before but I might have been mistaken.

share|improve this question
    
Well, I know very little but the best I know of is $echo * <ENTER> You could do that before the ls * command. That's not quite hitting tab or a shortcut to expand it of course. –  barlop Nov 28 '10 at 19:24
    
But perhaps linux users wouldn't do anything like ls * much 'cos it probably isn't necessary with ls, But also globbing behaves differently on different shells so it's not that portable, but when convenient then fine. But in ls's case, not necessary. ls */ lists directories but not so much what ls is designed to do. –  barlop Nov 28 '10 at 19:27
    
good question , +1 –  nsd Jun 16 '13 at 7:13

5 Answers 5

up vote 10 down vote accepted

You can use the glob-expand-word function, from 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.

Add something like this to your ~/.inputrc:

Control-x: glob-expand-word

So $ ls * followed by Ctrl-X will expand to $ ls a b c, in your example.

share|improve this answer
    
It should already be bound. And Ctrl-x is already bound as a prefix to a bunch of stuff. Do bind -p | grep 'C-x' to see them. –  Dennis Williamson Nov 28 '10 at 19:50
    
That's exactly what I was looking for! Thanks –  bramp Nov 28 '10 at 19:54
    
@Dennis, it wasn't already bound, but adding it to my .inputrc has. I guess that's Debian's default. –  bramp Nov 28 '10 at 19:55
    
@Dennis: It's bound to C-x* on my system. –  cYrus Nov 28 '10 at 19:56

In bash, the readline capability is called glob-expand-word and is bound to CtrlX* by default.

share|improve this answer

When you are in vi mode (set -o vi), the "magic key" is Esc*. This works with both bash and ksh.

share|improve this answer

An alternative to glob-expand-word (\C-x*) is insert-completions (\e*). It works without an asterisk at the end, but it also includes other completions like hidden files. I have rebound both in ~/.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) can be used to convert for example /System/Library/Launch*/*Finder to /System/Library/LaunchAgents/com.apple.Finder.plist.

share|improve this answer
$ 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*".

So to use these we can do

ls * Ctrl+x *

or

ls * Esc *

Expand complicated lines before hitting enter

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.