it-swarm-ru.tech

Лучший способ поиска по истории Shell

Есть ли лучший способ поиска команды в моем файле истории, чем grep? У меня есть некоторое представление о том, с чего начинается команда, но я не знаю, как далеко она зашла в историю.

pdate: раньше был специфичен только для zsh, но из-за перекрывающихся ответов не стесняйтесь отвечать здесь за любую оболочку (или режим (vi/emacs)), просто отметьте, является ли она конкретной.

82
xenoterracide

Ctrl+R как правило, лучший способ, как дескриптор сказал . Вы также можете использовать !string, которая запускает самую последнюю команду, начинающуюся с string или !?string?, которая запускает самую последнюю команду, содержащую string.

(Я думаю, что это единственное, что относится к этому вопросу, но я рассмотрел гораздо больше команд истории в этот ответ )

78
Michael Mrozek

При использовании Bash введите Control-R и затем начните печатать. Typing Control-R после ввода текста несколько раз вы вернетесь в соответствующие командные строки.

32
grendel

Не уверен, что это поможет, но мне нравится использовать ctrl-r и затем начните вводить команду. Он должен пройти через вашу историю и представить вам первый матч. Для переключения между матчами просто нажмите ctrl-r снова.

18
decriptor

Если добавить следующее к ~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

и перезапустите Bash, вы можете начать печатать, а затем использовать Page Up а также Page Down перемещаться назад и вперед по истории строк, начиная с того же префикса, который вы только что набрали.

(Некоторые могут предпочесть использовать \e[A а также \e[B, который заменит нормальный Up а также Down действия вместо привязки новых ключей.)

17
ephemient

Интерактивная подсказка, вызываемая Ctrl-RКак уже упоминалось, это самый удобный способ. Кроме того, популярно переназначить Up а также Down клавиши со стрелками для поиска в истории префикса, который в настоящее время находится в командной строке, однако для этого требуется некоторое изменения в ~/.inputrc файл .

Классическое и менее интерактивное решение - использовать расширение истории Shell. Typing

!foo

выполнит последнюю команду, которая начинается с foo и

!?foo

выполнит последнюю команду, содержащую foo. Дополнительную информацию о расширении истории можно найти в справочное руководство Bash , если предположить, что ваша оболочка является Bash или совместимой.

9
Adam Byrtek

Если вы добавите stty -ixon на ваш ~/.bashrc файл тогда Ctrl-s будет идти в противоположном направлении Ctrl-r,.

6
Paused until further notice.

Если вы введете !ls тогда bash просмотрит вашу историю и выполнит самую последнюю команду, которая начинается с "ls"

3
Kevin M

может быть специфичным для zsh. При исследовании этот ответ I найденоvi-history-search-backward, который позволяет искать с / в режиме vi (в котором я не упоминал, что я был) вы можете использовать n а также N искать вперед и назад соответственно (после нажатия enter).

2
xenoterracide

Я удивлен, что это не было упомянуто - но вы можете выбрать vi-mode в bash или ksh, выполнив это:

set -o vi

... или используя это как содержимое ~/.inputrc (для GNU readline, используемый в таких программах, как bash):

set editing-mode vi

Затем после этого вы можете использовать Esc ввести командный режим и использовать k вернуться в историю, и j идти вперед. Вы также можете искать, используя / искать нормально, и ? искать в обратном порядке.

Если вы используете ~/.inputrc, тогда это будет работать не только в GNU bash, но и во всем, что использует GNU readline, например CLISP, и, возможно, в таких программах, как команда MySQL Shell и т. CPAN Shell.

2
Mei

Для переключения вперед при использовании обратного поиска (с помощью команды Ctrl-R):

  1. Откройте файл .bashrc:
    Sudo gedit ~/.bashrc

  2. добавить эту строку (буква "f" может быть заменена другой, еще не используемой системой)

    bind '"\C-f": forward-search-history' 
    
  3. Закройте ваш файл и обновите ваш .bashrc (или откройте другой терминал) с помощью команды:
    source ~/.bashrc или . ~/.bashrc

ТЕПЕРЬ ВЫ МОЖЕТЕ ДВИЖИТЬСЯ В ИСТОРИЮ С ИСТОЧНИКОМ: Ctrl + f

Работа над Ubuntu 18.04 LTS

2
Franklin TCHATATH

Я использую следующие два большую часть времени.
Но обратите внимание, они оба ищут начальные символы.

  1. tcsh: введите несколько символов команды Esc+p он покажет предыдущую команду, начинающуюся с этой последовательности клавиш, нажмите ее еще раз, чтобы отобразить другую команду.
  2. ksh: использовать fc -e - <SPACE><first few char for your previous > это запустит последнюю команду, соответствующую этой последовательности.

Я не смог найти что-то вроде Ctrl+R в Bash для моего ksh и tcsh.

1
Hemant

Есть способ использовать Ctrl-R с tcsh. Добавьте следующее в ваш ~/.cshrc:

bindkey "^r" i-search-back (это просто знак каретки и буква r)

Это самая большая экономия времени для меня.

1
Alain

аналогичный ответ на @ephemient, но вы можете поместить в свой .bashrc

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

и введите часть фразы, а затем используйте стрелки вверх/вниз, чтобы просмотреть самые последние варианты, которые соответствуют. Это поведение по умолчанию в Matlab.

Для большинства людей, если вы хотите перенести свои настройки на новую систему, проще не забыть поймать только вашу ~/.bashrc то, что вы должны поймать, что ~/.inputrc

1
Matt S.

Да, он существует, по крайней мере, если вы используете Zsh. Просто начните вводить команду, а затем нажмите M-p (ESCp) и он найдет предыдущие команды, которые соответствуют тому, что вы ввели. Нажмите еще раз, чтобы найти следующий матч.

0
dkagedal