Як отримати доступ до другого аргументу з останньої команди в історії?


11

Я починаю вивчати деякі Regex, тому я використовую цю команду неодноразово:

grep pattern /usr/share/dict/american-english 

Змінюється лише частина з малюнком, тому мені доведеться писати довгий вираз " / usr / share / dict / american-english " знову і знову.

Хтось зробив зауваження, що можна розширити аргумент команди з історії команд, ввівши криптовалютні комбінації замість повного виразу. Не могли б ви сказати мені ці загадкові поєднання символів?


Це щодо другого аргументу чи останнього аргументу?
mikeserv

в цьому випадку останній аргумент трапляється другим, я не робив цього розрізнення.
Абдул Аль Хазред

В цьому випадку bash, dash, zsh, mksh, і kshснаряди (по крайней мере, що я знаю про) буде все визнають $_останній ARG спеціальний параметр (деякі роблять це тільки в інтерактивному режимі, хоча) . Це просто розширюється як змінна: grep somepattern filename; grep otherpattern "$_". Зазвичай ви можете бачити його вміст на виході set.
mikeserv

Відповіді:


23

Ви можете використовувати <M-.>(або <Esc>.якщо ваш мета-ключ використовується для чогось іншого), тобто мета-крапку (або <esc> крапку), де Meta зазвичай є клавішею Alt, щоб згадати останній аргумент попередньої команди. Отже, спочатку ви наберете

$ grep foo /usr/share/dict/american-english

І тоді, якби ви хотіли погризтись за чимось іншим, ви наберете б

$ grep bar

Після введення пробілу, а потім Esc.(тобто спочатку натисніть клавішу втечі, а потім клавішу періоду):

$ grep bar /usr/share/dict/american-english

Ви також можете скористатися одним із наступних:

$ grep bar !:2
$ grep bar !$

Де !:2і !$означають "другий аргумент" і "останній аргумент" відповідно.


Це для bash та оболонок, які використовують readline за допомогою прив'язки emacs (за замовчуванням): за допомогою editing-mode viнабору вам потрібно додати прив’язку ~/.inputrcдля, yank-last-argа для Zsh потрібно прив’язати insert-last-word...
jasonwryan

@jasonwryan, якщо це останній аргумент ви хочете, то в будь-якому з (інтерактивний) zsh , bash, ksh, mksh, або dashоболонок ви можете просто використовувати $_. ВІДКЛЮЧНО, що прив'язка вже встановлена, ESC _коли set -o viце діє.
mikeserv

@mikeserv Дякую Майку, я повинен був відбити його для сумісності ...
jasonwryan

@jasonwryan - немає проблем - це, мабуть, єдиний трюк клавіатури оболонки, який я знаю. Якщо ви не заперечуєте, сумісність з тим, що? Чи є якась програма, яку ви використовуєте, яка робить це інакше? О, я також можу запам’ятати ESC @letter для _letterприв'язки псевдоніма - але тільки тому, що я досі не можу зрозуміти, як змусити його працювати w / bsd editline.
mikeserv

@mikeserv Я пов'язую це таким чином, щоб це було те саме, незалежно від того, використовую я Bash або Zsh (обидва у режимі vi) або на машині з Bash в режимі Emacs (це одна з прив'язок, яку я дійсно забиваю).
Jasonwryan

2

Загалом (з Bash) <Esc> N <Esc> .буде згадувати N-й аргумент з попередньої команди в поточному командному рядку (де N заснований на 0).

Для другого аргументу з останньої команди це було б:

<Esc> 1 <Esc> .

Якщо ви хотіли третього аргументу, то

<Esc> 2 <Esc> .

... і так далі.

Як уже згадували інші, якщо ви хочете останній аргумент з попередньої команди, для цього є конкретний ярлик:

<Esc> .

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