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


34

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

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

Итак, чтобы прояснить

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

аналогично:

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

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


Ну, я знаю очень мало, но лучшее, что я знаю, это $ echo * <ENTER>. Это можно сделать до команды ls *. Конечно, это не совсем удачное нажатие на вкладку или ярлык.
Барлоп

Но, возможно, пользователи Linux не будут делать ничего подобного ls * много, потому что это, вероятно, не нужно с ls, но также и глобализация ведет себя по-разному на разных оболочках, поэтому она не так переносима, но когда удобно, то хорошо. Но в случае с лс, не обязательно. ls * / перечисляет каталоги, но не так много, для чего предназначен ls.
Бароп

Ответы:


19

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

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

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

Control-x: glob-expand-word

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


8
Это уже должно быть связано. И Ctrl-x уже привязан как префикс к куче вещей. Пойду, bind -p | grep 'C-x'чтобы увидеть их.
Приостановлено до дальнейшего уведомления.

Это именно то, что я искал! Спасибо
bramp

@ Денис, это еще не было связано, но добавление его в мой .inputrc имеет. Я думаю, что это по умолчанию Debian.
Bramp

3
@Dennis: Это связано с C-x*моей системой.
cYrus


11

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


Просто чтобы быть понятным vimmers, сначала введите звездочку при обычном наборе командной строки, затем выйдите из режима редактирования, курсор будет расположен на звездочке, если вы сразу же уйдете, затем нажмите звездочку с курсором, расположенным на звездочке, и шар будет разверните и снова поместите вас в режим редактирования.
NeilG

4
$ bind -q glob-expand-word
glob-expand-word может быть вызвано через "\ Cx *".

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

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

ls * Ctrl+x *

или

ls * Esc *

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


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

0

Альтернативой glob-expand-word (\ Cx *) являются вставки-дополнения (\ e *). Он работает без звездочки в конце, но он также включает в себя другие дополнения, такие как скрытые файлы. У меня есть отскок в ~ / .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) может использоваться для преобразования, например, /System/Library/Launch*/*Finderв /System/Library/LaunchAgents/com.apple.Finder.plist.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.