Вопрос или проблема
Содержимое файла истории команд с помощью history | less
:
555 ls
556 ls -a
557 echo "hello"
558 echo "hello again"
559 cd
560 pwd
561 echo "hello hello"
562 ls
563 echo "hello hello hello"
564 cd
565 pwd
Я хочу использовать обратный поиск по истории (reverse-i-search)`echo':
, чтобы просматривать только команды из файла истории команд, соответствующие введенному шаблону (в данном случае `echo`), предпочитая до указанного номера строки в файле истории, чтобы выбирать только ранее использованные echo
команды, которые я хочу выполнить снова, а не все echo
команды в файле истории команд.
Использование обратного поиска находит самое последнее использование команды echo
(отсюда и название обратный поиск, то есть обратный поиск команды). Однако при прокрутке вперед в обратном порядке (то есть обратный поиск) bash прокручивает каждую строку файла истории команд, начиная с строки, возвращенной обратным поиском, включая команды, которые я не хочу искать.
- Подсказка обратного поиска
(reverse-i-search)`echo':
исчезает, как только вы начинаете прокручивать список истории. Как сделать так, чтобы подсказка обратного поиска не исчезала во время прокрутки, чтобы при прокрутке вперед в обратном поиске отображались только команды, соответствующие шаблону? - Если 1 возможно, то как временно ограничить обратный поиск до определенного номера строки в файле истории команд, чтобы выбирать только команды из определенного раздела файла истории команд?
Примечание: решение этой проблемы также будет полезно в тех случаях, когда у вас есть несколько экземпляров одних и тех же аргументов командной строки, и обратный поиск не находит нужный вам вариант.
После того, как вы ввели свой поисковый термин, используйте:
- Ctrlr, чтобы искать “вверх” для предыдущей команды, и
- Ctrls, чтобы сменить направление и искать “вниз” для следующей.
У меня нет идеи, как ограничить количество записей истории для сканирования.
Если вы должны использовать команду less для поиска по истории, то обратный поиск можно легче выполнить с помощью команды tac:
$ history | tac | less
Таким образом, вам не нужно будет использовать опцию reverse-i в less.
Ответ или решение
Чтобы эффективно использовать обратный поиск (reverse i-search) в Bash для поиска команд, соответствующих определенному шаблону и ограничить поиск определенным диапазоном строки в файле истории команд, можно следовать следующей методике.
1. Остановка исчезновения подсказки обратного поиска
Когда вы используете обратный поиск и хотите прокручивать найденные команды, существует способ предотвратить исчезновение строки подсказки обратного поиска. Для этого, после ввода вашего шаблона (например, echo
), следуйте следующим шагам:
- Используйте сочетание клавиш Ctrl + r для поиска команд, соответствующих вашему шаблону.
- Чтобы перемещаться между найденными командами, используйте Ctrl + r для поиска "вверх" в истории и Ctrl + s для поиска "вниз".
Однако на стандартном уровне, после активации прокрутки с Ctrl + r, строка обратного поиска исчезает. Чтобы этого избежать, можно использовать другие утилиты.
2. Ограничение диапазона поиска
К сожалению, стандартный функционал Bash не поддерживает прямое ограничение диапазона строк во время обратного поиска. Тем не менее, вы можете использовать комбинацию команды history
с фильтрацией в утилите less
или вместе с tac
, чтобы обойти это ограничение.
Вот один из возможных способов:
history | grep "echo" | less
Эта команда сначала выберет все команды, содержащие "echo", а затем передаст их в less
, что позволит вам просматривать лишь нужные команды без риска прерывания сессии обратного поиска.
Если вы хотите работать с последними командами и не прокручивать всю историю, можно использовать:
history | tail -n 20 | grep "echo"
Здесь tail -n 20
ограничивает вывод последними 20 записями из истории, а grep
выбирает только те, которые содержат echo
.
Альтернативный подход
Если вам необходимо найти команды обратным порядком, как было подчеркнуто в предыдущем сообщении, вы можете использовать комбинацию tac
:
history | tac | grep "echo" | less
Таким образом, вы получаете команды в обратном порядке, что может быть удобным для ваших нужд.
Заключение
Хотя в Bash есть некоторые ограничения по выбору команд из истории на основе шаблона и ограничения строки, комбинирование команд grep
, less
, и tac
предоставляет гибкий способ поиска необходимой информации в истории команд. Эти методы позволят вам более эффективно использовать возможности командной строки, значительно облегчая повторное выполнение нужных команд.