Используйте обратный поиск для циклического просмотра только команд, соответствующих шаблону.

Вопрос или проблема

Содержимое файла истории команд с помощью 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 прокручивает каждую строку файла истории команд, начиная с строки, возвращенной обратным поиском, включая команды, которые я не хочу искать.

  1. Подсказка обратного поиска (reverse-i-search)`echo': исчезает, как только вы начинаете прокручивать список истории. Как сделать так, чтобы подсказка обратного поиска не исчезала во время прокрутки, чтобы при прокрутке вперед в обратном поиске отображались только команды, соответствующие шаблону?
  2. Если 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 предоставляет гибкий способ поиска необходимой информации в истории команд. Эти методы позволят вам более эффективно использовать возможности командной строки, значительно облегчая повторное выполнение нужных команд.

Оцените материал
Добавить комментарий

Капча загружается...