Как я могу искать историю удара и повторно выполнить команду?

Могу я история поиска в ударе и выполнять результат?

298
задан 18.07.2009, 00:50

5 ответов

Введите Ctrl R в командной строке и начните вводить предыдущую команду. После того как результат появляется, продолжают поражать Ctrl R для наблюдения других соответствий. Когда команда, которую Вы хотите, появляется, просто нажмите Enter

Обратите внимание что, в то время как Ctrl R является значением по умолчанию, если Вы хотели команду (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
$

Можно затем выполнить любую из этих команд с помощью их числового индекса путем снабжения предисловием индекса с синглом !, поскольку Mitch указал:

$ !1

Выполнится clear команда. Встроенная история имеет много функций сама, Вы видите больше в bash и history страницы справочника.

Можно также указать относительные отрицательные смещения при использовании ! указатель, таким образом с помощью нашего списка предыстории выше, если мы хотели выполниться vim снова, мы могли сделать:

$ !-2

Который в основном говорит удару выполнять команду, Вы работали "две команды назад". Для выполнения предыдущей команды в списке предыстории мы можем просто использовать !! (который является просто сокращением от !-1).

! указатель не ограничивает Вас числовым определением, которые управляют для выполнения. hayalci показал, что можно сообщить bash для выполнения команды на основе любого текст, это начинается (использование !) или текст в рамках самой команды (использование !?). Снова, с помощью нашего списка предыстории в качестве примера выше, если мы хотели выполниться clear снова, все, что мы должны сделать, ввести:

$ !cl

и нажмите Enter. И что относительно vim? Это столь же просто как:

$ !?some

Наиболее важный момент от ответа hayalci является вызовом к shopt встроенный:

$ shopt -s histverify

Это включит проверку истории так, чтобы команды, которые подобраны !, !!, и !? указатели вслепую не выполнены, но вместо этого заполнены на командной строке, таким образом, можно удостовериться, что они не сделают никакого зла прежде, чем выполнить их. Это еще более важно при выполнении команд как пользователь root. Эта опция может быть установлена в Вашем .bashrc файл запуска так, чтобы это было установлено каждый раз, когда Вы входите в систему.

Как был уже указан, вся эта информация может быть подобрана из bash страница справочника. Для!!!, и!? указатели, смотрите на Раздел 9.3 Расширений Истории.

432
ответ дан 16.12.2019, 22:45

Как альтернатива crtl+R, Вы можете история поиска путем ввода

!text

Это будет искать историю новую команду, начинающуюся с 'текста'.

Но я предполагаю, что Вы помещаете это в свой .bashrc для предотвращения выполнения неправильной команды.

shopt -s histverify

Это сообщает удару, таким образом что после любых действий истории (как !!:s/prev_text/after_text), это помещает получающуюся строку в командную строку. Затем можно рассмотреть или отредактировать команду и нажать Enter впоследствии.

37
ответ дан 16.12.2019, 22:45
  • 1
    Используйте!? текст, чтобы повторно выполнить новую команду, содержащую (в противоположность началу) "текст". – mark4o 18.07.2009, 23:36

Вы могли также сделать:

history | grep "stuff"

это возвратило бы что-то как

num stuff

затем можно ввести

!num
33
ответ дан 16.12.2019, 22:45

Превосходная рецензия, Sean! Я поместил это в комментарий, но я - несколько застенчивых точек репутации.:-)

Другая связанная и полезная техника является способностью выполнить предыдущую команду при изменении слова. Скажите Вас typoed имя каталога или хотите изменить имя файла:

$ echo my name is bob
my name is bob
$ ^bob^jordan
echo my name is jordan
my name is jordan

Заметьте, что команда расширена, заменена и произведена, прежде чем команда выполняется, поэтому если неправильная команда выполняется, Вы видите, какой удар думал, что это делало.

12
ответ дан 16.12.2019, 22:45

Я предпочитаю использовать history-search-backward по обратной истории поиска. Первый позволяет, Вы ввести несколько символов команды затем нажимаете клавишу поиска, в противоположность нажатию клавиши поиска сначала затем ввод строки поиска.

По умолчанию в моей системе, M-p и M-n связывают с подобными функциями, но я предпочитаю связывать клавиши со стрелками:

bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
16
ответ дан 16.12.2019, 22:45

Теги

Похожие вопросы