Поиск в истории Bash, частичный + стрелка вверх

Поиск в истории Bash, частичный + стрелка вверх

Я искал, но ничего не нашел по этому поводу. Я ищу функционал в bash, используя терминал.

Когда-то давно у меня был пользователь системы Debian, и мой друг настроил мне удобную функцию поиска по истории (кажется, тогда я использовал tcsh), где я мог ввести начало предыдущей команды, нажать стрелку вверх, и система выполнит поиск на основе части строки.

Например, если моя история:

./script.pl
./script.pl arg1
cat output
cat output | grep yada

И я печатаю .и нажимаю стрелку вверх, и мне показывают: ./script.pl arg1. Нажимаю еще раз, и мне показывают ./script.pl, и т. д.

Очень похоже на то, что он будет выполнять a grepon .bash_history. Есть ли способ получить эту функциональность?

решение1

Создайте ~/.inputrcи добавьте следующие строки:

# Respect default shortcuts.
$include /etc/inputrc

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

КОНЧИК:Прочитайте внизу, чтобы узнать, $include /etc/inputrcчто делать, если у вас уже есть файл ~/.inputrc.

Строки, начинающиеся с #— это комментарии.

Я не могу вспомнить, что назад, а что вперед. Поэкспериментируйте. Может, вам придется переключаться назад и вперед.

Закройте и снова откройте все терминалы, чтобы новое поведение вступило в силу.


Немного справочной информации:

Баш используетридлайндля обработки приглашения. ~/.inputrc— это файл конфигурации для readline. Обратите внимание, что это также будет иметь эффект в другом программном обеспечении, использующем библиотеку readline, напримерIPython.

Прочитайтеруководство по bashдля получения дополнительной информации о readline. Там вы также можете найти большекоманды readline, связанные с историей.

Чтобы получить коды выхода для клавиш со стрелками, вы можете сделать следующее:

  1. Запустите catв терминале (просто cat, без дополнительных аргументов).
  2. Нажимая клавиши на клавиатуре, вы получите такие символы, как ^[[Aстрелка вверх и ^[[Bстрелка вниз.
  3. Заменить .^[\e

Более подробную информацию ^[можно \eнайти здесь:https://unix.stackexchange.com/a/89817/380515


О линии $include /etc/inputrc:

Readline пытается прочитать ~/.inputrcконфигурацию. Если этот файл не существует, он попытается прочитать /etc/inputrc. Это значит, что если ~/.inputrcсуществует, он не будет читать /etc/inputrc.

Некоторые дистрибутивы подготовили некоторую конфигурацию в /etc/inputrc. Если вы затем создадите , ~/.inputrcвы потеряете подготовленную конфигурацию. Это может быть или не быть тем, что вы хотите. Чтобы сохранить подготовленную конфигурацию, /etc/inputrcвы можете использовать строку $include /etc/inputrcв вашем ~/.inputrc.

Если у вас уже есть файл ~/.inputrc, это означает, что вы либо уже знаете, что делаете. Либо вы унаследовали его от человека, который настраивал вашу систему. Или вы ранее следовали другому руководству, которое говорило вам создать файл, и забыли о нем. В любом случае вы можете проверить /etc/inputrcи решить, хотите ли вы сохранить его со строкой $include /etc/inputrc.

решение2

Создайте файл с именем setup_readline.sh с режимом 644 в /etc/profile.d/ со следующим содержимым, войдите в систему и проверьте предпочитаемые вами ключи:

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

Я думаю, это лучший способ сделать это. В основном, если вы используете системы управления конфигурациями, такие как chef, puppet и т. д.

И конфигурация системы осталась нетронутой!

решение3

Ctrl + Rдаст вам такую ​​функциональность. Начните вводить частичную команду, и она выведет старые, по которым вы можете перемещаться с помощью стрелок вверх и вниз.

Больше информацииздесь.

решение4

Чтобы завершить ответ lesmana относительно ~/.inputrcтого, что мне следует создать под моим Trusty 14.04, проверьте/добавьте ~/.bashrc(первая строка уже существует в моем ~/.bashrc):

shopt -s histappend  
PROMPT_COMMAND='history -a'  

Это уже объяснено на французском языке.здесь.

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