Как скопировать ранее введенную команду, используя утилиту истории, не запуская ее снова?

14

Я могу использовать historyкоманду в CentOS для получения списка предыдущих введенных команд, однако, если я сделаю что-то вроде:, !372history попытается выполнить указанную команду.

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

[dev@home ~]$ previous_command_no_execute!372  
centosnoob
источник

Ответы:

25

Как насчет, поместите это в вашей командной строке:

$ !372

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

Насколько я знаю, это работает только на Bash.

SmallClanger
источник
Да, это точное решение.
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команду из истории

user9517
источник
6

history | grep 372 должно работать, верно?

Редактировать:

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

MDMarra
источник
всегда работал для меня ...
voretaq7
нет, это просто находит эту конкретную команду, ранее запущенную.
Centosnoob
Тогда и я, и @ voretaq7 неправильно понимаем ваш вопрос. Не могли бы вы быть немного яснее?
MDMarra
@MDMarra Я обновил вопрос. Я надеюсь, что это проливает дополнительный свет.
Centosnoob
@centosnoob просматривает ваше обновление и полагает, что ваша консоль поддерживает мышь и копирование-вставку (и в наши дни редко бывает непосредственно на консоли в стиле терминала без возможности копирования-вставки) решение для копирования и вставки действительно наименее болезненное , Редактирование команды ви-стиль , как указано в моем ответе есть еще один вариант, но я VI фанатик и даже я не использую VI-стиль редактирования командной строки ...
voretaq7
4

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

Предполагая, что вы используете bash в качестве оболочки:

$ set -o vi
$ ESC372k

(теперь у вас есть команда, которую вы выполнили 372 команды назад, в строке, и вы будете в viрежиме командного стиля. Отредактируйте, как если бы вы использовали ex/ vi)

voretaq7
источник
Интересный. Кажется, это работает, только если вы запускаете "set -o vi" на ранней стадии. Возможно, это нужно поместить в профиль bash или что-то в этом роде.
Мэтт
Это одно из тех «я всегда использую vi, почему я не использую привязки vi для редактирования строк в bash», что вы понимаете с шоком. Требуется немного времени, чтобы привыкнуть, затем привязки в стиле emacs, которые все остальные используют, кажутся странными и бесполезными.
CJC
@Matt Да - вам нужно установить режим редактирования на viстиль редактирования. Он должен работать сразу после вас set -o viи работать со всей вашей историей (режим редактирования - это просто интерфейс к истории команд оболочки и другим вещам).
voretaq7
@cjc Я использую vi в качестве редактора, но я не использую привязки в стиле vi для редактирования моей командной строки (я только что узнал, как сделать это в режиме vi, не задумываясь, но другие опубликовали эквивалент в emacs-режиме, который может быть более дружелюбным :).
voretaq7
4

Самый простой и быстрый способ сделать то, что вы хотите, это запустить:

!372:p

с последующим Enterи

MikeyB
источник
0

Вы используете настольную систему или сервер?

На моей настольной системе Kubuntu с открытой оболочкой она поддерживает выделение мышью. Я обычно просто выделяю текст мышью и щелкаю среднюю кнопку мыши, чтобы вставить его. Будет ли это работать для вас?

Таким образом, вы можете grep для команды. Выделите текст. Вставьте его средней кнопкой мыши, затем отредактируйте.

Возможно, есть лучший способ, но это работает для меня.

Matt
источник
0

Нет команды для автоматической вставки, но вы можете вызвать любую команду в редакторе для ее редактирования перед выполнением. это может достичь того, что вы ищете, но после выхода команда будет выполнена, поэтому, если вы хотите прервать работу, вы должны очистить буфер редактирования перед выходом из редактора.

fc -e vi 372 372

johnshen64
источник