Как я могу получить доступ к истории bash с точным поиском, а не с префиксом? - PullRequest
2 голосов
/ 14 мая 2009

У меня есть две команды, которые я часто выполняю. Допустим, первое - это abcd, а второе - abc. Итак, моя история содержит

1000 abc arg1 arg2 arg3
1001 abcd arg1 arg2 arg3

Теперь, если я наберу !abcd в bash, он выполнит команду abcd. что хорошо Но если я наберу !abc в bash, он также выполнит последнюю команду abcd (поскольку она соответствует началу и является "более новой" )

Как мне использовать bash history, чтобы получить последнюю команду abc? Я пробовал !'abc ' и "!abc\ " обратную косую черту.

Ответы [ 8 ]

6 голосов
/ 14 мая 2009

Вы можете попробовать поиск в обратном журнале: Ctrl-R. В появившейся подсказке введите части своей командной строки (инкрементальный текстовый поиск).

Если вы хотите перейти к предыдущему совпадению, наберите еще Ctrl-R.

В вашем случае "двух одинаковых линий",

Ctrl-R abc Ctrl-R

или

Ctrl-R abc<SPACE>

может сделать это

3 голосов
/ 15 мая 2009

Поскольку Bash использует readline, попробуйте добавить это к ~/.inputrc и перезапустить Bash:

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

Это позволяет просто набрать

$ abc <PgUp>

для получения последнего элемента в истории, начинающегося с "abc ".

Было предложение добавить эти привязки к стандартному /etc/inputrc в некоторых популярных дистрибутивах Linux ... Я не помню, что это было.

2 голосов
/ 14 мая 2009

Это не отвечает на ваш вопрос напрямую, но если вы часто выполняете эти команды, вы можете подумать о добавлении определения псевдонима или функции в соответствующий точечный файл входа в систему, чтобы вы могли выполнять их с помощью однобуквенных команд:

alias a="abc arg1 arg2 arg3"
alias b="abcd arg1 arg2 arg3"
1 голос
/ 15 мая 2009

Если вы хотите, чтобы обманы не попадали в вашу историю, поместите это в свой запуск bash (.bash_profile или .bashrc)

export HISTCONTROL="ignoredups"
1 голос
/ 14 мая 2009

Попробуйте:

!?abc ?

Это пробел перед вторым знаком вопроса. Обратите внимание, что это (!?) Может найти «abc <space>» в любом месте командной строки, а не только в начале как «!» было бы. Второй знак вопроса означает, что после строки может быть дополнительный текст (например, ваши аргументы), а также разделитель пробела.

1 голос
/ 14 мая 2009

Один из способов сделать то, что вы просите, - использовать функции поиска по истории в bash. С помощью сочетаний клавиш emacs (по умолчанию) вы можете нажать CTRL-r. С сочетаниями клавиш vi используйте ESC /. Это также позволит вам искать другие части команды.

1 голос
/ 14 мая 2009

Если вы знаете номер истории, вы можете просто

!1000

или используйте

!-2

см. Строку перед предыдущей.

0 голосов
/ 03 января 2018

Возможно, вы захотите попробовать https://github.com/dvorka/hstr, который допускает фильтрацию истории Bash «предложить стиль коробки» с (необязательно) упорядочением по метрикам, т.е. он намного более эффективен и быстрее как в прямом, так и в обратном направлении:

enter image description here

Может быть легко привязан к Ctrl-r и / или Ctrl-s

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...