Могу ли я искать историю в bash и запустить результат?
Тип Ctrl р в командной строке и начните вводить предыдущую команду. Как только результат появится, продолжайте нажимать Ctrl р чтобы увидеть другие матчи. Когда появится нужная команда, просто нажмите Войти
Обратите внимание, что в то время как Ctrl р по умолчанию, если вы хотели команду ( reverse-search-history
) быть привязанным к Ctrl T Вы можете настроить это следующим образом:
bind '"\C-t": reverse-search-history'
Существует целый ряд других привязываемых команд readline, которые также доступны для вас. Посмотрите на bash
справочная страница ,
Bash имеет много возможностей для поиска и доступа к интерактивной истории команд. Основным из которых является history
встроенный. Набрав всего лишь:
$ history
Напечатает список команд вместе с числовым индексом, например:
$ history 1 clear 2 ls -al 3 vim ~/somefile.txt 4 history $
Затем вы можете выполнить любую из этих команд, используя их числовой индекс, предварительно указав один !
, как Митч указал:
$ !1
Выполнит clear
команда. Встроенная история имеет много особенностей, вы можете увидеть больше в bash
а также history
справочные страницы.
Вы также можете указать относительные отрицательные смещения при использовании !
обозначение, поэтому, используя наш список истории выше, если мы хотим выполнить vim
опять же мы могли бы сделать:
$ !-2
Что в основном говорит bash выполнить команду, которую вы выполнили «две команды назад». Чтобы запустить предыдущую команду в списке истории, мы можем просто использовать !!
(это просто сокращение для !-1
).
!
Обозначение не ограничивает вас числовым указанием команды для запуска. hayalci показал, что вы можете поручить bash
выполнить команду на основе текста, с которого она начинается (используя !
) или текст внутри самой команды (используя !?
). Опять же, используя наш пример списка истории выше, если мы хотим выполнить clear
Опять же, все, что нам нужно сделать, это набрать:
$ !cl
и нажмите Войти , И что насчет vim
? Это так просто, как:
$ !?some
Самый важный момент из hayalci ответом является призыв к shopt
встроенная:
$ shopt -s histverify
Это включит проверку истории, чтобы команды, соответствующие !
, !!
, а также !?
указатели не выполняются вслепую, а вместо этого вводятся в командной строке, чтобы вы могли убедиться, что они не причинили вреда, прежде чем выполнять их. Это еще более важно, когда вы выполняете команды от имени пользователя root. Эта опция может быть установлена в вашем .bashrc
файл запуска, чтобы он устанавливался при каждом входе в систему.
Как уже указывалось, всю эту информацию можно почерпнуть из bash
справочная страница , Для!, !!, и!? указатели, взгляните на раздел 9.3 Расширение истории ,
В качестве альтернативы Ctrl + R , вы можете искать историю, набрав
Это будет искать в истории самую последнюю команду начало с «текстом».
Но я предлагаю вам поместить это в ваш .bashrc, чтобы предотвратить выполнение неправильной команды.
Это инструктирует bash так, что после любой история действий (вроде
!!:s/prev_text/after_text
), он помещает полученную строку в командную строку. Затем вы можете просмотреть или отредактировать команду и затем нажать Enter.источник
Вы также можете сделать:
это вернуло бы что-то вроде
тогда вы можете напечатать
источник
Я предпочитаю использовать историю поиска назад, а не историю поиска назад. Первый позволяет вводить несколько символов команды затем нажмите клавишу поиска, вместо того, чтобы сначала нажать клавишу поиска, а затем набрать строку поиска.
По умолчанию в моей системе M-p и M-n связываются с похожими функциями, но я предпочитаю привязывать клавиши со стрелками:
источник
Отличная рецензия, Шон! Я бы добавил это в комментарии, но я застенчив на несколько пунктов репутации. :-)
Еще одна полезная и полезная техника - это возможность выполнить предыдущую команду при изменении слова. Допустим, вы указали имя каталога или хотите изменить имя файла:
Обратите внимание, что команда расширяется, заменяется и выводится до ее запуска, поэтому, если она запущена неправильно, вы можете увидеть, что, по мнению bash, она выполняла.
источник
У меня действительно отличный псевдоним, ч. Это на самом деле просто «history | grep», но я отфильтровываю предыдущие записи «h command» с помощью «grep -E -v»
используется как
источник
HISTIGNORE
,Поскольку навигация по истории с использованием Ctrl-r является IMO громоздкой, вы можете рассмотреть чч :
https://github.com/dvorka/hstr
что делает навигацию намного проще, понятнее и эффективнее, включая запуск команды:
источник
ctrl + r
по умолчанию сейчасВ командной строке bash введите control-R, затем введите несколько символов нужной вам команды, и средство чтения bash будет искать в истории команд эту команду.
После того, как вы начали поиск, вы можете снова нажать control-R, чтобы перейти к следующей соответствующей команде.
источник
Если ваша оболочка настроена на использование
vi
привязки клавиш (set -o vi
или имеяset editing-mode vi
в$HOME/.inputrc
), то вы ищете с<Esc>/some-command<Return>
и ударилn
(следующий) илиShift-n
(предыдущий) для циклического просмотра истории командной строки.источник
CTRL + р работает просто отлично, как предложил @ John1024, но несколько утомительно, если многие из ваших недавних команд похожи, и вы хотите быстрый способ отсканировать их все. Альтернативой было бы использовать
history
:источник