Я искал, но ничего не нашел по этому поводу. Я ищу функционал в bash, используя терминал.
Когда-то давно у меня был пользователь системы Debian, и мой друг настроил мне удобную функцию поиска по истории (кажется, тогда я использовал tcsh), где я мог ввести начало предыдущей команды, нажать стрелку вверх, и система выполнит поиск на основе части строки.
Например, если моя история:
./script.pl
./script.pl arg1
cat output
cat output | grep yada
И я печатаю .
и нажимаю стрелку вверх, и мне показывают: ./script.pl arg1
. Нажимаю еще раз, и мне показывают ./script.pl
, и т. д.
Очень похоже на то, что он будет выполнять a grep
on .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, связанные с историей.
Чтобы получить коды выхода для клавиш со стрелками, вы можете сделать следующее:
- Запустите
cat
в терминале (простоcat
, без дополнительных аргументов). - Нажимая клавиши на клавиатуре, вы получите такие символы, как
^[[A
стрелка вверх и^[[B
стрелка вниз. - Заменить .
^[
\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'
Это уже объяснено на французском языке.здесь.