Могу ли я искать историю в bash и запускать результат?
Могу ли я искать историю в bash и запускать результат?
Тип 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 Расширение истории,
В качестве альтернативы Crtl + R,, вы можете искать историю, набрав
!text
Это приведет к поиску истории для самой последней команды начало с текстом.
Но я предлагаю вам поместить это в ваш .bashrc, чтобы предотвратить выполнение неправильной команды.
shopt -s histverify
Это инструктирует bash, что после Любые действия в истории (например, !!:s/prev_text/after_text
), он помещает полученную строку в командную строку. Затем вы можете просмотреть или отредактировать команду и затем нажать Enter.
Вы также можете сделать:
history | grep "stuff"
он возвратит что-то вроде
num stuff
то вы можете ввести
!num
Я предпочитаю использовать историю-поиск-назад по истории обратного поиска. Первый позволяет ввести несколько символов команды тогда нажмите клавишу поиска, а не сначала нажмите клавишу поиска, а затем введите строку поиска.
По умолчанию в моей системе M-p и M-n связывают с аналогичными функциями, но я предпочитаю привязывать клавиши со стрелками:
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
Отличная запись, Шон! Я бы поставил это в комментарии, но у меня есть несколько точек репутации, застенчивых. :-)
Другим связанным и полезным методом является возможность запуска предыдущей команды при смене слова. Скажем, вы опечатали имя каталога или хотите изменить имя файла:
$ echo мое имя bob меня зовут Боб $ ^ bob ^ 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
Поскольку перемещение по истории с помощью Ctrl-r является очень громоздким, вы можете рассмотреть чч:
https://github.com/dvorka/hstr
что делает навигацию намного проще, проще и эффективнее - включая запуск команды:
В командной строке bash введите control-R, затем введите несколько символов команды, которую вы хотите, и средство readline для bash проведет поиск по истории команд для этой команды.
После того, как вы начали поиск, вы можете снова набрать control-R, чтобы перейти к следующей команде соответствия.
Если у вас настроена оболочка vi
привязки клавиш (set -o vi
или set editing-mode vi
в $HOME/.inputrc
), то вы выполняете поиск с помощью <Esc>/some-command<Return>
и ударил n
(далее) или Shift-n
(предыдущий), чтобы просмотреть историю командной строки.
CTRL+р работает очень хорошо, как, например, @ John1024, но несколько утомительно, если многие из ваших недавних команд похожи, и вы хотите быстро просмотреть их. Альтернативой будет использование history
:
$ history | grep keyword