Як розгорнути * у командному рядку Bash


34

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

Мені було цікаво, чи є спосіб розширити це перед тим, як натиснути Enter. Подібно до того, як працює Ctrl + X або завершує роботу вкладки .

Тож, щоб я зрозумів себе

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

аналогічним чином:

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

Я думав, що бачив це раніше, але, можливо, помилявся.


Ну, я знаю дуже мало, але найкраще, що я знаю, - це $ echo * <ENTER> Ви можете це зробити перед командою ls *. Це не зовсім вказівка ​​на вкладку чи ярлик для її розширення, звичайно.
барлоп

Але, можливо, користувачі Linux не роблять нічого подібного до ls * much ', оскільки це, мабуть, не потрібно, але також глобалізація поводиться по-різному на різних оболонках, тому це не так портативно, але коли це зручно, то добре. Але в лс-справі це не потрібно. ls * / перелічує каталоги, але не стільки те, що ls призначено робити.
барлоп

Відповіді:


19

Ви можете використовувати glob-expand-wordфункцію від людини bash:

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

Додайте щось подібне до свого ~/.inputrc:

Control-x: glob-expand-word

Тоді $ ls *далі Ctrl-Xбуде розширюватися до $ ls a b cвашого прикладу.


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

Це саме те, що я шукав! Дякуємо
бренд

@Dennis, він уже не був пов'язаний, але додав його до мого .inputrc. Я думаю, що це Debian за замовчуванням.
bramp

3
@Dennis: Це пов'язано C-x*з моєю системою.
cYrus


11

Коли ви перебуваєте в viрежимі ( set -o vi), "магічний ключ" є Esc*. Це працює і з bashі ksh.


Для того, щоб зрозуміти віммерам, спочатку введіть зірочку під час звичайного введення командного рядка, потім вийдіть з режиму редагування, курсор знайде зірочку, якщо ви втечете негайно, а потім натисніть на зірочку курсором, розташованим на зірочці, і глобус буде знову розгорнути і повернути вас у режим редагування.
NeilG

4
$ bind -q glob-extension-word
glob-extension-word можна викликати через "\ Cx *".

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

Тож використовувати ці ми можемо

ls * Ctrl+x *

або

ls * Esc *

Розгорніть складні лінії перед натисканням клавіші Enter


Це найкраща відповідь, оскільки він шукає точне введення клавіш, яке може бути різним у різних умовах.
Вісбукі

0

Альтернативою слову glob-extension (\ 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-повне слово (\ , наприклад) може бути використано для перетворення, наприклад , /System/Library/Launch*/*Finderдо /System/Library/LaunchAgents/com.apple.Finder.plist.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.