Как циклически выполнять обратный поиск в BASH?

Как циклически выполнять обратный поиск в BASH?

В терминале я могу ввести Ctrl+ Rдля поиска соответствующей команды, ранее введенной в BASH. Например, если я введу Ctrl+, Rа затем grep, он выведет мою последнюю grepкоманду, и я могу нажать Enter, чтобы использовать ее. Однако это дает только одну подсказку. Есть ли способ циклически перебирать другие ранее введенные соответствующие команды?

решение1

Если я правильно понял вопрос, вы сможете переключаться между альтернативами, многократно нажимая Ctrl+ R.

Например:

  • Ctrl+R
  • grep
  • Ctrl+R
  • Ctrl+ R ...

Это позволяет выполнить поиск назад по истории. Для поиска вперед вместо этого используйте Ctrl+ S, но вам может потребоваться установить: stty -ixon(либо вручную .bash_profile, либо вручную) до этого, чтобы отключить функцию XON/XOFF, которая берет на себя Ctrl+ S. Если это все равно произойдет, используйте Ctrl+ Q, чтобы снова включить вывод на экран (Подробнеездесь.)

решение2

Если вы считаете, что команда будет использоваться часто, вы можете добавить тег

command #useful

Затем

Ctrl+R #useful

Это работает, потому что #это разделитель комментариев, т.е. все, что идет после символа, не интерпретируется как команда. Однако это будет записано в историю и, таким образом, доступно для поиска.

решение3

Вы также можете настроить стрелки вверх и вниз, чтобы выполнить немного другой поиск, добавив следующие строки в ~/.inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

Вместо поиска подстроки в любом месте команды (например,Ctrl-r) он будет искать командуначиная с текста слева от курсора. Например, если я выполню эти команды:

$ ls bart
$ ls fools

затем введите lsи нажмите Upдважды, он покажет ls bartи курсор в том же месте. Сравните с Ctrl- r, где он найдет lsдважды в последней строке, поэтому вам придется нажать его еще раз, чтобы найти предыдущую строку.

Оба подхода имеют свои сильные стороны, и оба могут сэкономить много времени.

решение4

Есть замена встроенному, Ctrl + Rкоторый называетсяhstr. Он позволяет искать историю команд, соответствующую всем токенам поиска одновременно (помимо прочего), и циклически перемещаться по результатам с помощью клавиш со стрелками:

Пример

Вот этодемо-скринкаст.

Его можно установить на ОС семейства Debian, например:

add-apt-repository ppa:ultradvorka/ppa
apt-get update
apt-get install hstr

hstr --show-configuration >> ~/.bashrc

И затем использовать Ctrl + R(после повторного открытия терминала).

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