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


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

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

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

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

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

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


121
2017-09-03 12:11


происхождения


возможный дубликат iPython Как история команд для оболочки - Marcel Stimberg
@Marcel Похоже, это может быть тот же ответ, я увидел это в поиске, но не связал его с моим вопросом, с ключевыми словами iPython и Shell. - TLP


ответы:


Поместите следующие строки в свой ~/.inputrc:

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

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


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

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

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

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

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

171
2017-09-03 13:31



Отлично, но это решение отключает сочетания клавиш ctrl-left / ctrl-right. - Eyal
Может ли кто-нибудь сказать мне, как я могу добиться того же - Hitesh Kumar
@lesmana, я бы дал дополнительные очки только для части кошки - Mike D
Seconding @Eyal, у кого-нибудь есть советы о том, как я могу это иметь, но сохраняя ctrl-left / ctrl-right ярлыки? - kbrose
Выяснилось, каким-то образом readline, должно быть, вывел некоторые значения по умолчанию, если .inputrc не существует, но избавился от этих значений по умолчанию, когда файл был обнаружен. В дополнение к ярлыкам ответа, добавьте строки, чтобы сохранить сочетания клавиш ctrl-left / ctrl-right: например. "\e[1;5C":forward-word а также "\e[1;5D":backward-word - kbrose


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

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

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

И системная конфигурация все еще не тронута!


23
2018-06-02 07:58



Как ни странно, ~ / inputrc не работал для меня - но эти команды были введены в .bash_profile. - Joe
.inputrc не существует в моей домашней папке, и я предпочитаю иметь такие настройки в .bashrc в любом случае, поэтому я могу просто переносить один файл для своих настроек. Таким образом, это, вероятно, лучший ответ, затем принятый. - ShitalShah
.inputrc работает сказочно для меня, но не после загрузки screen, Странная вещь, другие .inputrc ярлыки работают, но не эти. Поэтому я использую оба решения сейчас. - Orwellophile
Это очень полезно, когда, например, вы заходите на сервер, чтобы что-то делать, и не замечаете этого и не хотите редактировать и перезагружать ~ / .inputrc на сервере. - danmactough


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


13
2017-09-03 12:17



Спасибо за ваш ответ. Да, я пробовал это, но я нахожу это немного ... искусно. Это не позволит мне прокручивать команды, начиная с частичного, это только показывает первый. Он также выполняет поиск всей команды для символа, который бесполезен. - TLP
@TLP, повторное попадание Ctrl+r - akostadinov


Чтобы закончить ответ lesmana относительно «~ / .inputrc», который я должен создать под моим Trusty 12.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,


4
2017-10-14 08:31



Эта команда в основном инструктирует bash немедленно добавить команду в файл истории, а не ждать окончания сеанса. Это полезно, если у вас много открытых терминалов и вы не хотите потерять историю в одном, но в противном случае не нужно. digitalocean.com/community/tutorials/... - ShitalShah
Кроме того, но Trusty - 14.04. 12.04 Точный. - wjandrea


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

enter image description here

Это может быть легко связанный в Ctrl-R и / или Ctrl-s


1
2017-08-28 22:01