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

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

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

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

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

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

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

6 ответов

Решение

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

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

Линии, начинающиеся с # Есть комментарии. Я не могу вспомнить, что назад, а что вперед. Экспериментируйте с этим. Возможно, вам придется переключаться назад и вперед.


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

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

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

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

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

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

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

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

И конфиг системы еще не тронут!

Ctrl+R даст вам такую ​​функциональность. Начните вводить частичную команду, и она найдет старые, которые вы можете перемещать с помощью стрелок вверх и вниз. Дополнительная информация: http://www.nuxified.org/blog/ctrl_r_in_the_bash_shell

Следующее решение объединяет и расширяет некоторые из вышеупомянутых подходов: добавьте следующие строки в ваш ~/.bash_aliases файл (нет необходимости в ~/.inputrc) для достижения следующего поведения:

  1. перемещаться вверх / вниз по истории (только записи с одинаковым префиксом), нажимая CTRL+UP и CTRL+DOWN. Это может сосуществовать со стандартной функциональностью перемещения вверх / вниз по всей истории с помощью UP и DOWN.
  2. перейти к следующему / предыдущему слову в командной строке, нажав клавиши CTRL+RIGHT и CTRL+LEFT
bind '"\e[1;5A":history-search-backward'
bind '"\e[1;5B":history-search-forward'
bind '"\e[1;5C":forward-word'
bind '"\e[1;5D":backward-word'

Заново войдите в оболочку (или запустите source ./bash_aliases), чтобы применить изменения.

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

shopt -s histappend  
PROMPT_COMMAND='history -a'  

Это уже объяснено на французском языке в https://doc.ubuntu-fr.org/terminal?&#pour_completer_les_commandes_a_partir_de_l_historique.

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

Его можно легко связать с Ctrl-r и / или Ctrl-s.

Существует альтернатива, аналогичная описанной выше @lesmana, но вам не нужно создавать новый файл.inputrc.

Вместо этого, если у вас есть разрешения sudo, вы можете включить это в файле /etc/inputrc. В этом файле находятся различные настройки клавиатуры, включая функцию поиска в истории (по крайней мере, для 18.04). Выдержка из /etc/inputrc:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

Раскомментируйте две нижние строки, используя редактор файлов sudo (например, $ sudo vim), и новый сеанс терминала будет иметь функцию поиска в истории (для всех пользователей). Таким образом, вам не нужно беспокоиться о создании файла ~/.inputrc, и вам не нужно будет добавлять $include заявление, как @Tulio Casagrande упоминается в комментариях, чтобы сохранить ваши Ctrl-стрелки ввода.

Другие вопросы по тегам