Как мне искать в моей истории командной строки команды, которые я использовал раньше?
Кроме просмотра истории, есть ли способ отфильтровать мою историю?
Скажите, я хочу найти команду, которая началась с "ssh"?
10 ответов
Нажмите Ctrl+R и введите ssh
, Ctrl+R начнет поиск с самой последней команды до старой (обратный поиск). Если у вас более одной команды, которая начинается с ssh
Нажмите Ctrl+R снова и снова, пока не найдете совпадение.
Как только вы нашли совпадение, вы можете нажать Enter, чтобы выполнить команду, или курсор влево / вправо, чтобы просто выбрать текст команды.
Для Ctrl+R нет обратного варианта по умолчанию, чтобы инвертировать направление поиска, но здесь вы найдете несколько советов по этому поводу.
Если вы просто хотите искать свою историю, вы можете просто использовать history | grep ssh
заменив ssh тем, что вы хотите найти.
Я делаю небольшую вариацию из вышеперечисленного, хорошо работает для меня (если вы имеете в виду вашу историю Bash
В моей домашней папке я создаю файл с именем
.inputrc
Внутри идет это
"\e[5~": history-search-backward
"\e[6~": history-search-forward
Примечание: вышеприведенное, похоже, больше не работает в 14.04, так что это делает то же самое -
"\e[A":history-search-backward
"\e[B":history-search-forward
Затем, набрав как можно большую часть предыдущей команды, используя кнопки "вверх" / "страница", dn ищет историю, всегда начиная с "вверх".
Вот еще один метод, использующий классические команды (более вероятно, работать через дистрибутивы). История команд хранится в файле .bash_history
в вашем домашнем каталоге, так что вы можете сделать это:
grep "ssh" ~/.bash_history
Не забывайте -i
Отметить, если вам нужен поиск без учета регистра.
Нажатие Ctrl+R запустит режим "reverse-i-search", ввод "ssh" будет искать в вашей истории команды, содержащие "ssh".
Я нашел следующую функцию где-то в Интернете и использовал ее с большим эффектом. Поместите это в свой ~/.bashrc
:
hgrep () {
history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@"
}
Теперь перезагрузите вашу оболочку: exec bash
, Теперь у вас есть новая команда, которую вы можете использовать так:
hgrep ssh
Он покажет вам список соответствующих команд из вашей истории. Для запуска команды введите !
с последующим номером команды. Вот пример:
~:$ hgrep scp
207 tn scp foreign-teachers __HOST__:unity.log __HOST__:compiz.log .
421 tn scp scott-laptop __HOST__:Scott\ Severance.asc .
422 tn scp scott-laptop __HOST__:'Scott\ Severance.asc' .
468 tn scott-desktop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
469 tn scott-laptop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
470 scp -r Backgrounds/* 192.168.1.2:Pictures/Backgrounds
~:$ !207
Мне нравится этот подход лучше, чем Ctrl+R, потому что он позволяет гораздо более гибкий поиск, и я могу видеть несколько результатов одновременно.
История хороша, но ограничена - я предпочитаю настроить свою среду bash так, чтобы я регистрировал все команды, которые я когда-либо выполнял, в дополнение к каталогу, в котором они были запущены. Затем я запускаю команду, чтобы вывести список всех команд Я запустил в текущем каталоге, который я могу направить на grep и т. Д. - это называется "блюдо" см:
https://github.com/wolfwoolford/dish
Если вы хотите перейти в погоню, просто укажите это в своем.bashrc ( https://github.com/wolfwoolford/dish/blob/master/dishrc)
Есть также действительно полезная команда, которую вы получаете бесплатно, которая называется "dishg" - или "тарелка глобальная", которая распечатывает каждую команду, которая когда-либо выполнялась, независимо от каталога. Очевидно, что это полезно только при использовании с grep, tail и т. Д.
Я использую его годами, и это буквально первое, что я устанавливаю, когда устанавливаю новую коробку. Он записывает команды, которые вы запускаете в текстовые файлы, в скрытом каталоге (~/.dish) .. У меня никогда не было проблем с дисковым пространством...
Мне нравится искать мою историю с помощью grep вместо Ctrl+R обратного поиска. Это потому, что вы можете видеть только одну строку с Ctrl+R. С помощью grep вы получите более полное представление о вашем последнем взаимодействии с командой и т. Д.
У меня в моем
.bashrc
. Это позволяет вам искать в истории команд, набрав
hiss KEYWORD
. Называйте это как хотите. Я люблю шипеть ^^ . Не забудьте перезагрузить
.bashrc
файл с
source ~/.bashrc
hiss () { history | grep "$@"; }
Хотел написать это как комментарий к @ssmy, но не смог получить форматирование в комментарии для сотрудничества.
После поиска по истории с history | grep ssh
затем вы можете выполнить желаемую команду, набрав ее номер с восклицательным знаком, например: !42
,
Пример:
$ история | grep ssh 5 ssh me@someserver.net 13 ssh me@someotherserver.net 42 ssh me@thisone.com 42 доллара
Если вы используете shell в Emacs (M-x shell
) ты можешь использовать M-r
(это эквивалентно Ctrl+R в терминале).