
Есть ли лучший способ поиска команды в моем файле истории, чем 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 или совместимая.