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


34

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

Звичайно, за винятком використання клавіш зі стрілками і Delклавішами: ... DelDelDel... Del<new_command>.

Відповіді:


45

Наприклад, якщо запустити цю команду:

mkdir long_path_here/new_dir

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

  • cd Esc.- тип cdі після натискання, Escза яким слідує .(не одночасно). Якщо в попередній команді немає аргументів, ви отримаєте саму попередню команду.
  • cd !*- у цьому випадку ви отримаєте всі аргументи з команди previuos. Якщо в попередній команді немає аргументів, ви нічого не отримаєте.
  • cd Alt+ .- введіть cdі після натискання Altі .(одночасно). Насправді, використовуючи цей спосіб і продовжуючи натискати .(без випуску Alt), ви отримаєте останній аргумент для кожної команди з історії. Якщо у команди немає аргументів, ви отримаєте саму команду.

Загалом: <command> Esc.або <command> !*або <command> Alt+ ..


уау, ти врятував мене сотні годин, я б закінчив витрачати
гроші

32

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

  • Для всіх аргументів: <command> !*
  • Для останнього аргументу: <command> !$

Приклади:

ls foo/ bar/
ls !* # Gives the results of ls foo/ bar/

ls foo/ bar/
ls !$ # Gives the results of ls bar/

Якщо ви хочете отримати один аргумент зі списку аргументів попередньої команди, ви можете використовувати <command> !!:<argNumber>

Приклад:

ls foo/ bar/ baz/
ls !!:2 # Gives the results of ls bar/
ls foo/ bar/ baz/
ls !!:1 # Gives the results of ls foo/

2
Вам потрібно лише один !в одного версії ARG, наприклад, !:2. Припустимо, що за замовчуванням баш.
белаква

3
Ви також можете використовувати !^замість !:1.
Падді Ландау

7

Згадування !*і !$це хороша річ, але коли вам потрібно трохи відредагувати ярлики для читання рядків, приходять на допомогу!

Наприклад, замість безлічі ... DelDelDel... Delви можете просто натиснути Ctrl-a(перейти до початку рядка) Alt+d(видалити до кінця слова)

Для отримання додаткової інформації man readlineта пошуку Default key bindings.


4

Щоб взяти nаргумент із попередньої команди, введіть Alt+ n+ Alt_. Наприклад, після:

$ echo 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

набравши echoпісля чого Alt2Alt_дасть вам це на наступному рядку:

$ echo 2

"Скріншот" після потрапляння Alt2:

(arg: 2) echo

Ви можете повторити Alt_кілька разів, щоб отримати nаргумент попередніх команд послідовно.

Ще одна корисна ідея - визначити псевдонім r="fc -s". Потім ви можете робити підстановки команд:

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