Ваш Ctrl - r перехватывается основанным на ядре механизмом обработки готовых строк терминала.
Пока работает sleep
, терминал находится в подготовленном режиме, что означает, что редактор tty-строк на основе ядра работает. Редактор tty-строки поддерживает простейшее редактирование командной строки. Клавиша стирания (обычно устанавливается на Ctrl - h (backspace) или Del ) и клавиша уничтожения (обычно Ctrl-U ) являются наиболее известными специальными клавишами редактирования, которые можно использовать в этом режиме. Этот редактор строк полезен: он позволяет интерактивным утилитам, не использующим ни readline, ни curses, читать полные строки ввода с терминала, позволяя пользователю вносить исправления при вводе.
Но есть еще одна особая клавиша, которая активна в этом режиме. Вы можете увидеть его вместе с другими ключевыми параметрами в выводе stty -a
под именем rprnt
, и его значение по умолчанию ... как вы уже догадались ... Ctrl - r . Функция этого ключа состоит в том, чтобы перерисовать текущую командную строку, если она была повреждена или смещена из-за другого вывода терминала.
Чтобы избежать этого, вы можете отключить эту функцию с помощью stty rprnt undef
.
Лично я привык, что Ctrl - r интерпретируется как команда перерисовки, и я удивляюсь каждый раз, когда пытаюсь сделать это в bash
и это делает что-то другое!