Как развернуть * в командной строке Bash

7443
bramp

Я понимаю, что если вы печатаете, ls *он фактически расширяется до того ls a b cмомента, когда у текущего есть файлы a, bи c.

Мне было интересно, есть ли способ расширить это, прежде чем я нажму Enter. Аналогично тому, как работает Ctrl + X, или работает tab tab .

Так что прояснить

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

аналогично:

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

Я думал, что видел это раньше, но я мог ошибаться.

30
Ну, я знаю очень мало, но лучшее, что я знаю, это $ echo * Вы можете сделать это до команды ls *. Конечно, это не совсем удачное нажатие на вкладку или ярлык. barlop 13 лет назад 0
Но, возможно, пользователи Linux не будут делать ничего подобного ls * много, потому что это, вероятно, не нужно с ls, но также и глобализация ведет себя по-разному на разных оболочках, поэтому она не так переносима, но когда удобно, то хорошо. Но в случае с лс, не обязательно. ls * / перечисляет каталоги, но не так много, для чего предназначен ls. barlop 13 лет назад 0

5 ответов на вопрос

19
Ignacio Vazquez-Abrams

В bash функция readline вызывается glob-expand-wordи CtrlX*по умолчанию связана с ней.

17
cYrus

Вы можете использовать glob-expand-wordфункцию от man bash:

Слово перед точкой рассматривается как шаблон для имени пути расширение, и список совпадающих имен файлов вставляется, заменить слово. Если указан числовой аргумент, Звездочка добавляется перед расширением пути. 

Добавьте что-то вроде этого к себе ~/.inputrc:

Control-x: glob-expand-word 

Таким образом, $ ls *последует Ctrl-Xрасширение $ ls a b c, в вашем примере.

Это уже должно быть связано. И Ctrl-x уже привязан как префикс к куче вещей. Do `связать -p | grep 'C-x'` чтобы увидеть их. Dennis Williamson 13 лет назад 6
Это именно то, что я искал! Спасибо bramp 13 лет назад 0
@ Денис, это еще не было связано, но добавление его в мой .inputrc имеет. Я думаю, что это по умолчанию Debian. bramp 13 лет назад 0
@Dennis: Это связано с `Cx *` в моей системе. cYrus 13 лет назад 2
9
jlliagre

Когда вы находитесь в viрежиме ( set -o vi), «магический ключ» есть Esc*. Это работает с обоими bashи ksh.

3
Steven Penny
$ bind -q glob-expand-word glob-expand-word может быть вызвано через "\ Cx *".  $ bind -q вставки-дополнения Вставка дополнений может быть вызвана через "\ e *". 

Таким образом, чтобы использовать их, мы можем сделать

ls * Ctrl+x *

или же

ls * Esc *

Расширять сложные линии, прежде чем нажать Enter

Это лучший ответ, потому что он ищет точную привязку клавиш, которая может быть разной в разных средах. wisbucky 6 лет назад 0
0
user495470

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.