Как выборочно перемещаться по истории команд Bash на терминале Linux [дубликат]


9

Все знают (или должны знать!), Что на терминале клавиши со стрелками вверх и вниз используются для навигации по истории используемых команд.

Когда вы используете терминал ежедневно, история ваших команд, вероятно, будет длинным списком множества различных команд, что сделает навигацию менее простой. В качестве примера, скажем, месяц назад я использовал iwconfigнабор с определенным набором параметров (как я уже сказал, это просто пример, мне не нужно сейчас с ним связываться), как я могу вспомнить эту конкретную команду со всеми его аргументами и параметрами без необходимости перемещаться назад через сотни команд истории?

Я знаю, что мог бы использовать historyсписок ранее использованных команд и !nповторно выполнить команду n в указанном списке, но когда история увеличивается, это тоже не очень практично.

Идеально было бы иметь что-то, что позволило бы мне использовать некоторую горячую клавишу для навигации по истории, но только между экземплярами, которые содержат то, что я уже набрал в командной строке; так что в моем примере, после ввода iwconfig, используйте некоторые клавиши (возможно, PgUp и PgDown?) для навигации по записям, начинающимся с iwconfig .

Если это невозможно, было бы неплохо напечатать список, например, historydo, но он будет содержать только то, что я уже набрал (я подозреваю, что historyи grepкоманда задействована, но я не уверен в правильном синтаксисе); но предыдущее решение горячей клавиши было бы лучшим вариантом.

Ответы:


12

Вы можете искать историю, используя Ctrl+, Rа затем введите строку поиска (например, iwчтобы найти iwconfig). Затем вы все еще можете перемещаться по истории в этой точке с помощью клавиш со стрелками вверх и вниз, или снова нажмите Ctrl+, Rчтобы найти предыдущий случай.


Я не уверен, что хорошо понял, что это работает. Если я нажимаю Ctrl + R и тип iwconfig, он показывает мне экземпляр , который содержит его (не обязательно самый последний), но если я с помощью клавиш со стрелками, то перемещаться по всем пунктам, а не только те , которые содержит строку. Мне кажется, что он выбирает конкретную точку в истории, с которой начинается навигация (вместо того, чтобы начинать снизу, как это делает клавиша вверх), но кроме этого навигация такая же, как всегда. Я что-то пропустил?
Сехемты,

Я думаю, что это не имеет значения, но на всякий случай я использую konsoleэмулятор терминала.
Sekhemty

Извините, я обновил свой ответ о том, как найти предыдущие совпадения.
Стефан Зайдель

5

После небольшой практики я нашел, как использовать обходное решение.

Я выбрал правильный синтаксис для печати отфильтрованного списка, я сделал это history | grep iwconfig(это было не так сложно в конце концов); с выводом, который я могу использовать !nс теперь легко читаемым отфильтрованным списком.


3
Дополнительный трюк: использование !n:p. Это печатает старую команду без ее выполнения и возвращает ее в вашу историю. Затем перейдите к нему одним движением стрелки вверх, и теперь вы можете редактировать его. Есть много других глупых уловок, подобных этому: ss64.com/bash/history.html
Блуждающая логика

3

Я не могу комментировать ответ Стефана, но вам обычно приходится нажимать Ctrl + R. Смотрите эту страницу для получения дополнительной информации.


2

Нажмите "Ctrl + R", затем введите строку поиска.

Если не тот, который вы ищете, то снова "Ctrl + R"

Если найдено, нажмите Enter, чтобы выполнить его. Или нажмите стрелку вправо ->, чтобы отредактировать его перед использованием.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.