Лучший способ поиска по истории shell

Лучший способ поиска по истории shell

Есть ли лучший способ поиска команды в моем файле истории, чем grep? Я имею некоторое представление о том, как начинается команда, но я не знаю, насколько далеко в истории она находится.

обновлять:раньше был специфичен для zsh, но из-за дублирования ответов вы можете свободно отвечать для любой оболочки (или режима (vi/emacs)), просто отметьте, если это специфично.

решение1

Ctrl+ Rобычно является лучшим способом, так какдескриптор сказал. Вы также можете использовать !string, который запускает последнюю команду, начинающуюся с string, или !?string?, который запускает последнюю команду, содержащую string.

(Я думаю, это единственное, что имеет отношение к данному вопросу, но я рассмотрел гораздо больше команд истории вэтот ответ)

решение2

При использовании Bash введите Control- Rи затем начните печатать. Повторное нажатие Control- Rпосле ввода текста вернет вас к соответствующим командным строкам.

решение3

Если вы добавите следующее к~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

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

(Некоторые могут предпочесть использовать \e[Aи \e[B, которые заменят обычные действия Upи Downвместо привязки новых клавиш.)

решение4

Интерактивная подсказка, вызываемая Ctrl- R, о которой уже упоминалось, является наиболее удобным способом. Кроме того, популярно переназначать Upи Downклавиши со стрелками для поиска в истории префикса, который в данный момент находится в командной строке, однако это требует некоторыхизменения в ~/.inputrcфайле.

Классическое и менее интерактивное решение — использовать расширение истории оболочки.

!foo

выполнит последнюю команду, которая начинается с fooи

!?foo

выполнит последнюю команду, содержащую foo. Более подробную информацию о расширении истории можно найти вСправочное руководство по Bash, предполагая, что ваша оболочка — Bash или совместимая.

Связанный контент