Назад | Перейти на главную страницу

Журнал Putty «вывод для печати» печатает все вводимые ключи / символы

Я использую Putty на своем ПК с Windows. Я заметил, что мои файлы журналов, созданные с использованием стандартного журнала Putty «Вывод для печати», будут регистрировать все нажатия клавиш, даже те, которые я удалил.

Например, если я хочу ввести abcd, но я неправильно набрал abvd, и я дважды нажимаю Backspace, чтобы удалить vd, и перепечатайте cd, файл журнала будет выводиться как abvdcd. Как я могу исправить файл журнала, чтобы отображались только входные данные после нажатия клавиши Enter, чтобы он правильно отображал abcd в файле журнала?

Примечание: Я не могу установить какое-либо внешнее программное обеспечение на свой ПК с Windows, поэтому, надеюсь, есть способ решить эту проблему в Windows. У меня тоже нет опыта программирования.

Я не думаю, что ты должен видеть abvdcd - на моем тестировании я получаю abvd cd.

Предполагая, что SSH (для чего большинство людей используют Putty) вы не можете. Он немедленно отправляет каждый набранный символ хосту, и хост выполняет редактирование строки. В этом примере:

  • вы вводите a b c d. Putty отправляет эти символы хосту, который помещает их в свой буфер и отображает их обратно в Putty, который показывает их на экране и регистрирует.

  • вы вводите два пробела. Putty отправляет их хосту, который удаляет два символа из буфера; для каждого из них он (обычно?) перекликается с backspace space backspace, и когда Putty помещает эту последовательность на свой экран, он имеет чистый эффект визуального стирания двух символов и оставления курсора там, где был первый, то есть после 'ab'. Putty также регистрирует настройки; если у вас есть «весь вывод» и вы посмотрите на файл с помощью инструмента, который отображает невидимые управляющие символы, вы должны увидеть всю последовательность, но «вывод для печати» регистрирует только пространство.

    Возможно, вы используете хост, который использует какой-либо другой метод отображения эффекта backspace, например backspace erase-line или backspace erase-chars (1).

  • Вы вводите c d; Putty отправляет их хосту, который добавляет их в свой буфер и отображает их в Putty, который отображает и регистрирует их.

  • Вы вводите return, и Putty отправляет его хосту, который повторяет CR и LF, который Putty отображает и регистрирует. Хост также обрабатывает входной буфер в его нынешнем виде ('abcd'), что, вероятно, приводит к некоторым выходным данным.

Как вы можете видеть, все эти символы (a b v d [BS] SP [BS] [BS] SP [BS] c d CR LF) на самом деле пришли с хоста, и Putty не может отличить, что некоторые должны регистрироваться, а некоторые нет. Если вы используете line-kill в Unix (обычно ^ U), по крайней мере, на моем CentOS он отображает (и регистрирует) несколько обратных пробелов по мере необходимости, затем стирает остаток строки (это ESCape [K, где последовательность ESC [также называется CSI Command Sequence Introducer).

Если вы входите со значением «все» и у вас есть Unix или Unix-подобные утилиты, вы можете запустить файл через col -b плюс что-то вроде sed 's/\x1b\[[0-9]*[A-Z]//' при необходимости получить «окончательный отображаемый результат». Это также исправит любой (другой) вывод хоста, который пытается использовать избыточное выделение, как некоторые вещи, такие как man и nroff, и десятилетия назад на печатных терминалах часто работали хорошо.

Если вы используете Telnet, который Putty также поддерживает, но большинство хостов больше не работают, поскольку он небезопасен, этот протокол по умолчанию ведет себя так же, но у него есть вариант для редактирования строки на клиенте перед отправкой. Я не могу сказать, поддерживает ли Putty эту опцию, и какие хосты все еще поддерживают - IME раньше был популярен в основном на мэйнфреймах «большого железа», таких как IBM Univac GE, которые почти никто не использует напрямую сегодня.