Як скопіювати раніше введену команду за допомогою утиліти історії, не запускаючи її знову?


14

Я можу використовувати historyкоманду на CentOS, щоб отримати список попередніх введених команд, однак, якщо я щось подібне:: !372, історія спробує запустити посилається команду.

Мені потрібна попередня команда запуску для відображення в поточному курсорі. Ось приклад:

[dev@home ~]$ previous_command_no_execute!372  

Відповіді:


25

Як щодо цього, поставте це у свій командний рядок:

$ !372

Потім натисніть, ESCпісля чого CTRL+E. Це автоматично розгорнеться в командному рядку, фактично не запустивши його. (також розширює все інше на лінії, включаючи env vars)

Наскільки я знаю, це працює лише на Bash.


Так, саме це рішення.
centosnoob

1
Для рішення в zsh натисніть на вкладку після введення, !372і це розширить її для вас.
Рейд

10

Ви можете використовувати Ctrlrта вводити деякі символи з оригінальної команди, наприклад

(reverse-i-search)`/etc': sudo /etc/init.d/apache2 restart

вище я надрукував , Ctrl-r /etcі він підтягнув sudo /etc/init.d/apache2 restartкоманду з історії


6

history | grep 372 має працювати, правда?

Редагувати:

Крім того, ви можете зробити щось на кшталт того, echo !372 > /dev/clipщоб помістити каталог команд у буфер обміну.


завжди працював на мене ...
voretaq7

ні, це просто знаходить, що певна команда виконується раніше.
centosnoob

Тоді і я, і @ voretaq7 нерозуміють ваше запитання. Ви могли б бути трохи більш зрозумілим?
MDMarra

@MDMarra Я оновив питання. Я сподіваюся, що він проливає деяке світло.
centosnoob

@centosnoob дивиться на ваше оновлення і припускає, що ваша консоль підтримує мишу та копіювати пасту (і рідко буває безпосередньо на консолі стилю терміналу, не маючи можливості копіювати вставку в наші дні) рішення копіювання та вставки дійсно найменш болісно . Редагування команди ві-стиль , як зазначено в моїй обороні є ще один варіант, але я VI фанатик і навіть я не використовую VI-стиль редагування командного рядка ...
voretaq7

4

MDMarra запропонував простий спосіб ( history|grepі скопіюйте / вставте за допомогою робочого середовища, припускаючи, що у вас є). Я надаю те, що я називаю важким способом, який працює, якщо у вас немає середовища для робочого столу чи миші.

Якщо припустити, що ви використовуєте bash як свою оболонку:

$ set -o vi
$ ESC372k

(тепер у вас з'явиться команда, яку ви виконали 372 команди тому, в рядку, і ви будете знаходитись у viкомандному режимі -style. Відредагуйте так, як було б, якщо ви використовували ex/ vi)


Цікаво. Це, здається, спрацює лише в тому випадку, якщо ви рано встановили "встановити -o vi". Можливо, потрібно це помістити в баш-профіль чи щось таке.
Метт

Це одне з таких "я завжди використовую vi, чому я не використовую прив'язки vi для редагування рядків в баш", те, що ти розумієш із шоком. Потрібно трохи часу, щоб звикнути, тоді прив’язки в стилі emacs, якими користуються всі інші, почуваються дивними та марними.
cjc

@Matt Так - вам потрібно встановити режим редагування на vi-style редагування. Він повинен працювати, як тільки ви set -o vi, і повинен працювати всю вашу історію (режим редагування - це лише інтерфейс до історії команд оболонки та інших речей).
voretaq7

@cjc Я використовую vi як свій редактор, який я вибираю, але я не використовую прив'язки у стилі vi для редагування мого командного рядка (я випадково знав, як це зробити у vi-режимі вгорі голови, але інші опублікували еквівалент в режимі emacs, який може бути більш доброзичливим :).
voretaq7

4

Найпростіший і швидкий спосіб зробити те, що ви хочете, - це запустити:

!372:p

слідом за Enterі


0

Ви перебуваєте на настільній системі чи сервері?

У моїй настільній системі Kubuntu з відкритою оболонкою вона підтримує підсвічування за допомогою миші. Зазвичай я просто виділяю текст мишкою і натискаю середню кнопку миші, щоб вставити її. Чи це вам підійде?

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

Може бути і кращий спосіб, але це працює для мене.


0

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

fc -e vi 372 372

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