В bash функция readline вызывается glob-expand-word
и CtrlX*по умолчанию связана с ней.
Как развернуть * в командной строке Bash
Я понимаю, что если вы печатаете, 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
Я думал, что видел это раньше, но я мог ошибаться.
5 ответов на вопрос
- Популярные
- Новые
- С комментариями
- Активные
Вы можете использовать glob-expand-word
функцию от man bash
:
Слово перед точкой рассматривается как шаблон для имени пути расширение, и список совпадающих имен файлов вставляется, заменить слово. Если указан числовой аргумент, Звездочка добавляется перед расширением пути.
Добавьте что-то вроде этого к себе ~/.inputrc
:
Control-x: glob-expand-word
Таким образом, $ ls *
последует Ctrl-Xрасширение $ ls a b c
, в вашем примере.
Когда вы находитесь в vi
режиме ( set -o vi
), «магический ключ» есть Esc*. Это работает с обоими bash
и ksh
.
$ bind -q glob-expand-word glob-expand-word может быть вызвано через "\ Cx *". $ bind -q вставки-дополнения Вставка дополнений может быть вызвана через "\ e *".
Таким образом, чтобы использовать их, мы можем сделать
ls *
Ctrl+x *
или же
ls *
Esc *
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
.
Похожие вопросы
-
2
.profile в Mac OS X?
-
1
Приостановить все, кроме x задач, интенсивно использующих процессор
-
10
Как я могу найти в истории bash и повторно запустить команду?
-
-
2
Можно ли передать выходные данные одной команды двум другим командам?
-
8
Переименуйте группу файлов одной командой
-
2
Почему мой путь не обновляется * сейчас *?
-
5
Как удалить символическую ссылку на каталог?
-
8
Спаси меня от бессмысленного терминала
-
9
Как можно добавить номер строки и табуляцию к каждой строке текстового файла?
-
1
Когда я должен положить конфигурации в .bashrc против. .bash_profile?