Как я могу просмотреть историю ударов и повторить команду?
Могу ли я поискать историю в бэше и прогнать результат?
Могу ли я поискать историю в бэше и прогнать результат?
В качестве альтернативы crtl+R, вы можете искать историю, набрав
!text
Это позволит искать в истории самую последнюю команду beginning с ‘text’.
Но я предлагаю поместить это в .bashrc, чтобы предотвратить выполнение неправильной команды.
shopt -s histverify
Это инструктирует bash так, что после всех действий с историей (например, !!:s/prev_text/after_text
), он помещает полученную строку в командную строку. Затем вы можете просмотреть или отредактировать команду, а затем нажать Enter.
Я предпочитаю использовать исторический поиск задом наперёд, а не обратный поиск-истории. Первая позволяет набирать несколько символов команды then, нажимая клавишу поиска, вместо того, чтобы сначала нажимать клавишу поиска, а затем набирать строку поиска.
По умолчанию в моей системе M-p и M-n привязываются к похожим функциям, но я предпочитаю привязывать клавиши со стрелками:
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
Отличная запись, Шон! Я бы поставил это в комментарий, но я несколько репутационных очков стесняюсь. :-)
Еще одна связанная и полезная техника - это возможность выполнить предыдущую команду при смене слова. Скажем, вы опечатали имя каталога, или хотите изменить имя файла:
$ echo my name is bob my name is bob $ ^bob^jordan echo my name is jordan my name is jordan
Обратите внимание, что команда разворачивается, заменяется и выводится перед выполнением, так что если запустить не ту команду, вы увидите, что она делала.
Поскольку навигация по истории с помощью Ctrl-r является IMO громоздкой, вы можете рассмотреть hh : https://github.com/dvorka/hstr
, что делает навигацию намного проще, понятнее и эффективнее - включая выполнение команды:
В интерпретаторе команд bash введите controll-R, затем введите несколько символов нужной команды, и bash’s readline будет искать эту команду в истории команд.
После того, как вы запустили поиск, вы можете набрать controll-R еще раз, чтобы перейти к следующей соответствующей команде.
Если ваша оболочка настроена на использование привязки ключей vi
(set -o vi
или set editing-mode vi
в $HOME/.inputrc
), то вы ищете с помощью <Esc>/some-command<Return>
и нажимаете n
(следующий) или Shift-n
(предыдущий), чтобы пролистать историю командной строки.
CTRL+R работает просто отлично, как предложил @John1024, но это несколько утомительно, если многие из ваших последних команд похожи, и вы хотите быстрый способ сканировать их все. Альтернативой будет использование history
:
$ history | grep keyword
Мне нравится HSTR, но иногда я не могу его установить. Поэтому я написал псевдоним, используя fzf , который имитирует его поведение (hx
, для “выполнения истории”)
alias hx='eval $(history | sed "s/^ *[0-9]* *//g" | fzf --tac --tiebreak=index --height=10)'
history
: ну, получим историю sed
: удалим столбец с номерами из списка (POSIX) fzf
: вот магия, позволяющая размыть список интерактивно, или переместимся с C-J
и C-K
, а затем выполним команду с Enter
. --height
: устанавливает количество показанных строк. --tac
: вернуть список (более логичный для истории) --tiebreak=index
: сохранить порядок истории, когда fzf обновляет результаты.