Альтернативный способ запуска обратного i-поиска без нажатия Ctrl + R в Bash - PullRequest
3 голосов
/ 24 февраля 2009

Функция обратного i-search в bash полезна, но она отличается от большинства других команд bash тем, что кажется связанной с привязкой клавиш ( Ctrl + R ) , Как пользователь может вызвать это средство, используя вместо этого псевдоним или введенную команду?

Ответы [ 2 ]

4 голосов
/ 11 апреля 2009

Если вы посмотрите страницы руководства для bash или history (3readline) в разделе «Расширение истории> Указатели событий», вы увидите команды для выполнения подобных действий.

!?prof?

вызовет самую последнюю команду, содержащую "prof", и выполнит ее немедленно. Если вы хотите напечатать команду без ее выполнения, вы можете добавить ": p"

!?prof?:p

Чтобы отредактировать команду в командной строке, используя приведенный выше пример, введите:

!?prof

(не нажимайте ввод) и нажмите M - ^

Они используют средство расширения bash. Они получают только самый последний матч.

Если вы хотите написать сценарии или псевдонимы, посмотрите на странице руководства bash встроенные команды "fc" и "history" (-p или -s). Тоже "покупал - с историдит".

Вот пример псевдонима:

alias dothis='`history -p "!?jpg?"`'

(это обратные кавычки внутри одинарных кавычек).

С некоторыми из этих команд вы также можете делать классные "s / old / new" и другие вещи.

4 голосов
/ 24 февраля 2009

Функция reverse-i-search фактически является функцией readline (история обратного поиска), а не встроенной функцией bash (встроенная команда или см. встроенные команды в справочном руководстве bash ). Насколько мне известно, нет способа вызвать функцию readline, кроме привязки ее к ключу.

Вы можете увидеть все привязки клавиш readline к этим функциям, используя "bind -l -p". Список привязываемых команд readline также можно найти в справочном руководстве.

Вы всегда можете использовать команду history, чтобы получить список истории, и использовать grep, чтобы найти то, что вы ищете. Я нахожу это полезным:

alias hists="history | grep -v '^ *[0-9]* *hists' | grep $@"

Когда я запускаю hists something, я получаю список всех команд, которые соответствуют something. Все, что мне нужно сделать, это сделать! # Для запуска команды. Например:

bash-3.2$ hists emacs
   30 emacs
  128 emacs
  129 emacs
  204 emacs
  310 emacs .bash_history
  324 emacs Documents/todo.txt
bash-3.2$ !324

Это не совсем то, что вы ищете, но это настолько близко, насколько я могу это сделать.

...