Могу ли я искать историю в bash и запустить результат?
Могу ли я искать историю в bash и запустить результат?
Ответы:
Тип Ctrl р в командной строке и начните вводить предыдущую команду. Как только результат появится, продолжайте нажимать Ctrl р чтобы увидеть другие матчи. Когда появится нужная команда, просто нажмите Войти
Обратите внимание, что в то время как Ctrl р по умолчанию, если вы хотели команду ( reverse-search-history
) быть привязанным к Ctrl T Вы можете настроить это следующим образом:
bind '"\C-t": reverse-search-history'
Существует целый ряд других привязываемых команд readline, которые также доступны для вас. Посмотрите на bash
справочная страница ,
Bash имеет много возможностей для поиска и доступа к интерактивной истории команд. Основным из которых является history
встроенный. Набрав всего лишь:
$ history
Напечатает список команд вместе с числовым индексом, например:
$ history 1 clear 2 ls -al 3 vim ~/somefile.txt 4 history $
Затем вы можете выполнить любую из этих команд, используя их числовой индекс, предварительно указав один !
, как Митч указал:
$ !1
Выполнит clear
команда. Встроенная история имеет много особенностей, вы можете увидеть больше в bash
а также history
справочные страницы.
Вы также можете указать относительные отрицательные смещения при использовании !
обозначение, поэтому, используя наш список истории выше, если мы хотим выполнить vim
опять же мы могли бы сделать:
$ !-2
Что в основном говорит bash выполнить команду, которую вы выполнили «две команды назад». Чтобы запустить предыдущую команду в списке истории, мы можем просто использовать !!
(это просто сокращение для !-1
).
!
Обозначение не ограничивает вас числовым указанием команды для запуска. hayalci показал, что вы можете поручить bash
выполнить команду на основе текста, с которого она начинается (используя !
) или текст внутри самой команды (используя !?
). Опять же, используя наш пример списка истории выше, если мы хотим выполнить clear
Опять же, все, что нам нужно сделать, это набрать:
$ !cl
и нажмите Войти , И что насчет vim
? Это так просто, как:
$ !?some
Самый важный момент из hayalci ответом является призыв к shopt
встроенная:
$ shopt -s histverify
Это включит проверку истории, чтобы команды, соответствующие !
, !!
, а также !?
указатели не выполняются вслепую, а вместо этого вводятся в командной строке, чтобы вы могли убедиться, что они не причинили вреда, прежде чем выполнять их. Это еще более важно, когда вы выполняете команды от имени пользователя root. Эта опция может быть установлена в вашем .bashrc
файл запуска, чтобы он устанавливался при каждом входе в систему.
Как уже указывалось, всю эту информацию можно почерпнуть из bash
справочная страница , Для!, !!, и!? указатели, взгляните на раздел 9.3 Расширение истории ,
В качестве альтернативы Ctrl + R , вы можете искать историю, набрав
!text
Это будет искать в истории самую последнюю команду начало с «текстом».
Но я предлагаю вам поместить это в ваш .bashrc, чтобы предотвратить выполнение неправильной команды.
shopt -s histverify
Это инструктирует bash так, что после любой история действий (вроде !!:s/prev_text/after_text
), он помещает полученную строку в командную строку. Затем вы можете просмотреть или отредактировать команду и затем нажать Enter.
Я предпочитаю использовать историю поиска назад, а не историю поиска назад. Первый позволяет вводить несколько символов команды затем нажмите клавишу поиска, вместо того, чтобы сначала нажать клавишу поиска, а затем набрать строку поиска.
По умолчанию в моей системе 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
Обратите внимание, что команда расширяется, заменяется и выводится до ее запуска, поэтому, если она запущена неправильно, вы можете увидеть, что, по мнению bash, она выполняла.
У меня действительно отличный псевдоним, ч. Это на самом деле просто «history | grep», но я отфильтровываю предыдущие записи «h command» с помощью «grep -E -v»
alias h="history | grep -E -v '^ *[0-9]+ *h ' | grep "
используется как
h aliases
2003 less .bash_aliases
HISTIGNORE
,
Поскольку навигация по истории с использованием Ctrl-r является IMO громоздкой, вы можете рассмотреть чч :
https://github.com/dvorka/hstr
что делает навигацию намного проще, понятнее и эффективнее, включая запуск команды:
ctrl + r
по умолчанию сейчас
Если ваша оболочка настроена на использование vi
привязки клавиш ( set -o vi
или имея set editing-mode vi
в $HOME/.inputrc
), то вы ищете с <Esc>/some-command<Return>
и ударил n
(следующий) или Shift-n
(предыдущий) для циклического просмотра истории командной строки.