Backspace, удаляя всю строку в терминале
Я подключился по SSH к шлюзовому компьютеру, а затем оттуда по SSH на другой компьютер. Каждый раз, когда я нажимаю на Backspace, вся строка удаляется ...
Использование stty -aдает мне следующее (частичный отрывок):
Как видите, backspace ("^?") Привязан к нему erase, поэтому я ожидал, что с его помощью будет удален только один символ. Тем не менее, по какой-то причине он ведет себя как ^ U, где вся строка удаляется ... Как вы можете видеть ниже, как только я нажимаю клавишу возврата, "^?" отправляется символ, и вся строка удаляется, несмотря на то, что она сопоставлена с erasenot kill...
Уже опубликовано много похожих вопросов, но ни одно из этих решений здесь не работает, поскольку stty уже сопоставляется сerase . (т.е. это )
Я использую bash.
Ответы
Ключ к разгадке intr = ^?. Когда вы нажимаете Backspace, оболочка получает SIGINTот терминала и очищает командную строку. Я могу легко воспроизвести проблему, запустив stty intr ^?.
Обычно это intr = ^Cозначает Ctrl+ cтриггеры SIGINT. Запустите это:
stty intr ^C
Заметки:
- В приведенной выше команде вы можете ввести
^Cбуквально два символа:^иC;sttyдолжен понимать. - Чтобы исправить Backspaceэто, достаточно установить
intrвсе, кроме^?. Например, вы можете установить для него значение «ничего» (undefined), вызвавstty intr ''. По-прежнему^Cдолжен быть вашим первым выбором.