Некоторые терминалы отправляют ^h
(символ номер 8) для клавиши BackSpace , а некоторые отправляют ^?
(персонаж № 127). Можно настроить многие эмуляторы терминала, и большинство программ можно настроить, чтобы знать, какой ключ ожидать. Очевидно, что обе стороны должны согласиться.
Stty - это способ, которым приложения могут запрашивать конфигурацию терминала. erase = ^?
означает, что ваш файл описания терминала на сервере утверждает, что когда ваш терминал отправляет ^?
, это означает «стереть предыдущий символ». werase = ^?
значит что ^?
означает «стереть предыдущее слово». Есть противоречие между этими двумя настройками.
Когда вы входите через ssh, клиент ssh отправляет имя для терминала, которое помещается в переменную окружения TERM
. Программы на сервере затем ищут описания терминала в базе данных (называемой termcap или terminfo). Если эти описания нарушены или файл конфигурации (например, /etc/profile
или ~/.login
или ~/.bashrc
) заменяет описания неверными данными, вы можете обнаружить несоответствие. Например, один из возможных источников вашей проблемы - если какой-нибудь файл инициализации содержит команду stty werase '^?'
(заставляя ^?
иметь в виду слово стереть) пока ваш терминал отправляет ^?
для клавиши возврата.
В идеале, вы должны исправить конфликт, так как многие программы будут читать эту информацию.
В Putty вы можете настроить, какой из ^?
или ^h
отправляет ключ BackSpace . Проверьте значение этого параметра. Возможно, самый простой способ решить вашу проблему - это заставить Putty отправить ^h
для BackSpace и убедиться, что сервер использует этот параметр (stty erase '^h'
, который будет помещен в ~/.bashrc
, принудительно вызовет его).