Это библиотека редактирования строки readline(3)
-, которая обычно статически создается как часть bash, но также используется другими программами.
Каждый раз, когда он начинает читать команду от пользователя, readline сохраняет настройки терминала и переводит терминал в «сырой» режим [1], чтобы он мог обрабатывать перемещение точки вставки вправо и влево, вспоминать команды из истории и т. д. Когда readline(3)
возвращает (, например. когда пользователь нажимает Enter ), восстанавливаются исходные настройки терминала. Readline также будет путаться с сигналами, что может привести к некоторому запутанному поведению .
Если вы просматриваете bash
, ищите ioctl(TCSETS*)
(, который реализует tcsetattr(3)
), иioctl(TCGETS)
(tcgetattr(3)
). Это те же самые функции, которые используются в stty(1)
. Если вы запустите bash с --noediting
, вы увидите, что он не трогает настройки терминала.
[1] не совсем "сырой" режим cfmakeraw(3)
; вы можете увидеть точные детали здесь . Все эти настройки терминала задокументированы на справочной странице termios(3)
.