Поиск истории 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.
Чтобы получить коды выхода для клавиш со стрелками, вы можете сделать следующее:
- Начните
cat
в терминале (простоcat
, без дальнейших аргументов). - Наберите клавиши на клавиатуре, вы получите такие вещи, как
^[[A
для стрелки вверх и^[[B
для стрелка вниз. - замещать
^[
с\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
) для достижения следующего поведения:
- перемещаться вверх / вниз по истории (только записи с одинаковым префиксом), нажимая CTRL+UP и CTRL+DOWN. Это может сосуществовать со стандартной функциональностью перемещения вверх / вниз по всей истории с помощью UP и DOWN.
- перейти к следующему / предыдущему слову в командной строке, нажав клавиши 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-стрелки ввода.