Як я можу згадати аргумент попередньої команди bash?


Відповіді:


562

Ви можете використовувати $_або!$ згадати останній аргумент попередньої команди.

Також Alt + .можна використовувати для згадування останнього аргументу будь-якої з попередніх команд.


121
Крім того, якщо ви хочете довільний аргумент, ви можете використовувати !!:1, !!:2і т. Д. ( !!:0Це сама попередня команда.) Див. Gnu.org/software/bash/manual/bashref.html#History-Interaction
janmoesen

41
Подібно до !$, ви використовуєте !^для першого аргументу.
Буде

13
ааа ... * нікс ... ти штука краси ... щодня я тебе більше люблю
jx12345

Як ми можемо звернутися до другого до останнього аргументу попередньої команди? Наприклад, якщо я дав echo tiger rabbit, як я можу звернутися tigerдо наступної команди?
Чан Кім

3
Alt + .не працює у режимі vi. Просто FYI, для інших, хто тут заплутався.
Брайан МакКучон

160

Якщо попередня команда мала два аргументи, як це

ls a.txt b.txt

і ти хотів першого, ти можеш набрати

!:1

давання

a.txt

Або якщо ви хотіли обох, ви можете набрати

!:1-2

давання

a.txt b.txt

Ви можете поширити це на будь-яку кількість аргументів, наприклад:

!:10-12

@RNA, я просто спробував це ще раз, щоб переконатися, що я не включив помилку друку, чи можете ви надати трохи детальніше (наприклад, командний рядок ubuntu, cygwin для Windows? Повідомлення про помилку? Попередній рядок?)
Роберт Гоуланд

Я використовую GNU bash, версія 3.2.51 (1) -випуск (x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc. Повідомлення про помилку-bash: :1-2: bad word specifier
RNA

2
Я отримую те саме, якщо в попередньому рядку не було двох аргументів. Напр. рядок 1 ls a.txtрядок 2ll !:1-2
Роберт Гоуланд

ти маєш рацію. Це дурна помилка, яку я зробив. Дякую!
РНК

Також для отримання всіх аргументів !:^-$можна використовувати або, звичайно, аналогічний код у поєднанні з цифрами.
816-8055

88

!!:n де n знаходиться 0-позиція потрібного аргументу.

Наприклад:

echo 'one' 'two'
# "one two"

echo !!:2
# "two"

The !Префікс використовується для доступу попередніх команд.

Інші корисні команди:

  • !$ - останній аргумент з попередньої команди
  • !^ - перший аргумент (після програми / вбудованого / скрипту) з попередньої команди
  • !! - попередня команда (часто вимовляється "чубчик")
  • !n- номер команди nвідhistory
  • !pattern - остання відповідність команд pattern
  • !!:s/find/replace- остання команда, замінити findнаreplace

Більше інформації про історію команд


7
Замість цього !!:s/find/replaceви також можете ^find^replace.
Big McLargeHuge

Також: !* - всі аргументи з попередньої команди (після програми / вбудованого / скрипту). напр .: ls *.tmp *.cache rm !*
Афоїд

68

У командному рядку можна натиснути esc- .абоalt +.

Він переходить через останній аргумент попередніх команд.


Я завжди знаходив і ключі для роботи, а також.
Відро

Клавіші @Bucket переходять за допомогою попередніх команд, тоді як рішення, яке надає Антоніо, дозволяє пройти попередні аргументи (лише останній аргумент кожної попередньої команди)
everyonesdesign

30

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

Використовуйте наступне, щоб взяти другий аргумент з третьої команди в історії,

!3:2

Використовуйте наступне, щоб взяти третій аргумент з п'ятої останньої команди в історії,

!-5:3

Використовуючи знак мінус, ви просите його перейти від останньої команди історії.


19

! * запускає нову команду з усіма попередніми аргументами.

ls /tmp
cd !*
#you are now in /tmp

Мені це не спрацювало на OSX - довелося використовувати $_замість цього.
Майк Ш

16

Так, ви можете використовувати !$для згадування останнього аргументу попередньої команди.


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