Вопрос Как я могу найти историю bash и повторить команду?


Могу ли я искать историю в bash и запускать результат?


271
2017-07-17 19:23


происхождения




ответы:


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

Обратите внимание, что пока Ctrl  р по умолчанию, если вы хотите выполнить команду (reverse-search-history) быть привязанным к Ctrl  T вы можете настроить это следующим образом:

bind '"\ C-t": reverse-search-history'

Существует целый ряд других команд, поддерживающих readline, которые доступны вам. Взгляните на bash справочная страница,

У Bash есть много возможностей для поиска и доступа к интерактивной истории команд. Самым основным из которых является history встроенный. Ввод только:

$ history

Распечатает список команд вместе с числовым индексом, например:

$ history
1 ясно
2 ls -al
3 vim ~ / somefile.txt
4 истории
$

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

$! 1

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

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

$! -2

Что в основном говорит bash, чтобы выполнить команду, которую вы запускали «две команды назад». Чтобы запустить предыдущую команду в списке истории, мы можем просто использовать !! (что является просто сокращением для !-1).

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

$! cl

и нажмите Войти, И что насчет vim? Это так просто:

$!? некоторые

Самый важный момент из hayalciОтвет - это вызов shopt встроенная:

$ shopt -s histverify

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

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


390
2017-07-17 19:25



+1 Я использую Linux более 12 лет для всех систем. Я не знал, что это было. Желаю, чтобы я мог +10 как я пропустил это ?? - Aiden Bell
Я не узнал об этом, пока не начал регулярно использовать emacs. Затем я случайно набрал его в bash однажды (думая, что я был в emacs). - Sean Bright
Во многих системах нажатие стрелки вверх делает то же самое. - mas
Стрелка вверх для меня просто переходит к предыдущей команде. Но да, это все связано с тем, что вы хотите. - Sean Bright
Также после нажатия CTRL + R вы можете использовать CTRL + SHIFT + R несколько раз, чтобы вернуться к предыдущей команде - Gal Bracha


В качестве альтернативы Crtl + R,, вы можете искать историю, набрав

!text

Это приведет к поиску истории для самой последней команды начало с текстом.

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

shopt -s histverify

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


34
2017-07-17 20:40



Используйте!? Text, чтобы повторно выполнить самую последнюю команду, содержащую (в отличие от начала) текст. - mark4o
Если кто-то должен был консолидировать '!', '!!', '!?', 'History | grep 'и' ctrl-r 'в комплексный ответ, я бы выбрал его. - Richard Hoskins


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

history | grep "stuff"

он возвратит что-то вроде

num stuff

то вы можете ввести

!num

27
2017-07-17 20:21





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

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

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

14
2018-02-02 20:32





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

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

$ echo мое имя bob
меня зовут Боб
$ ^ bob ^ jordan
эхо мое имя - иордан
Меня зовут Джордан

Обратите внимание, что команда запускается, заменяется и выводится перед запуском команды, поэтому, если запущена неправильная команда, вы можете увидеть, что, по мнению bash, она делала.


12
2017-09-10 14:23





У меня действительно отличный псевдоним, ч. Это действительно просто «history | grep», но я отфильтровываю предыдущие записи «h command» с помощью «grep -E -v»,

alias h="history | grep -E -v '^ *[0-9]+ *h ' | grep "

используется как

h aliases
2003  less .bash_aliases

12
2017-09-25 16:45



Это также можно выполнить, добавив команду в HISTIGNORE, - tanenbring


Поскольку перемещение по истории с помощью Ctrl-r является очень громоздким, вы можете рассмотреть чч:

https://github.com/dvorka/hstr

что делает навигацию намного проще, проще и эффективнее - включая запуск команды:

enter image description here


5
2017-12-18 16:37



Как это использовать? Какие клавиши нажать, чтобы увидеть эту картинку? - Nakilon
После установки hh вы можете либо использовать команду hh, либо привязать ее к любой комбинации клавиш (обычно Ctrl-r), как описано в документации. - Martin Dvorak
он связывается с ctrl + r по умолчанию сейчас - Alleo