В отличие от этого bash
, ssh
приглашение пароля не использует никакой специальной библиотеки терминального ввода, как readline
. Функции редактирования строк - это просто основные функции редактирования строк POSIX TTY.
Таким образом, у вас есть POSIX TTY в «приготовленном» режиме (не в необработанном виде), он же канонический режим, и единственное доступное редактирование строк - это то, что обеспечивает ядро. Смотрите stty(1)
и обратите на это внимание
kill = ^U
. Здесь также определяется символ возврата ( erase = ^?
). Стирание слов ( ^W
) удобно, когда вы не печатаете вслепую.
lnext = ^V
означает, что вы можете набрать control-v, затем что угодно (включая control-c), чтобы получить буквальный control-c.
Чтобы отладить то, что вы пытались делать вслепую, запустите cat
или cat > /dev/null
в своем терминале . Напечатайте вещи, затем посмотрите, что работает, а что нет, чтобы редактировать
readline
(используется bash
) читает необработанный символ и выполняет редактирование строки в пространстве пользователя. Однако его привязки по умолчанию совместимы с управляющими символами TTY по умолчанию для подмножества функций редактирования, которые они оба предоставляют.
readline выходит далеко за рамки простого редактирования строки простого TTY. (например, TTY может удалять только символы в конце строки, поэтому нет ^a
и / delete
или стрелка влево / вправо)
Когда bash
команда запускается на переднем плане, она сначала переводит TTY в канонический режим (потому что это значение по умолчанию). Таким образом, работающий stty -a
(без перенаправления) всегда будет видеть свой собственный терминал в каноническом режиме. Но если вы перенаправите ввод с другого TTY, на котором он bash
запущен, вы увидите, какие настройки терминала применены bash + readline. например, stty -a < /dev/pts/12
показывает -icanon
для режима raw, потому что у меня bash
работает на этом терминале. (Я переключился на другую вкладку и побежал tty
, затем использовал путь к файлу этого устройства с первого терминала). Если бы я работал cat
в этом другом терминале, я бы посмотрел icanon
на канонический режим.
Связанный: TTY демистифицирован
https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html
https://en.wikipedia.org/wiki/POSIX_terminal_interface