我在 Windows PC 上使用 Putty。我注意到使用 Putty 默认“可打印输出”日志创建的日志文件将记录所有按键,包括那些我已删除的按键。
例如,如果我想输入abcd
,但我错误地输入了abvd
,然后我按两次 Backspace 删除vd
,并重新输入cd
,则日志文件将输出为abvdcd
。我该如何更正日志文件以仅在按下 Enter 键后显示输入,以便它正确显示abcd
在日志文件中?
笔记:我无法在 Windows PC 上安装任何外部软件,所以希望有办法解决 Windows 上的这个问题。我也没有任何编程背景。
答案1
我认为你不应该看到abvdcd
——经过我的测试,我得到了abvd cd
。
假设使用 SSH(大多数人使用 Putty 来做这件事),您就不能这样做。它会立即将每个输入的字符发送到主机,然后主机进行行编辑。对于此示例:
你输入 abc d。Putty 将这些字符发送到主机,主机将它们放入缓冲区并将它们回显给 Putty,Putty 将它们显示在屏幕上并记录下来。
您输入两个退格键。Putty 将这些键发送到主机,主机从缓冲区中删除两个字符;对于每个字符,它(按照惯例?)回显退格空格退格,当 Putty 将此序列放到屏幕上时,其最终效果是视觉上擦除两个字符并将光标留在第一个字符所在的位置,即“ab”之后。Putty 还会按配置进行记录;如果您有“所有输出”并使用显示不可见控制字符的工具查看文件,您应该会看到整个序列,但“可打印输出”仅记录空格。
您可能正在使用采用其他方法显示退格效果的主机,例如退格擦除行或退格擦除字符 (1)。
您输入 cd; Putty 将它们发送到主机,主机将它们添加到其缓冲区并将它们回显到 Putty,Putty 显示并记录它们。
你输入回车键,Putty 会将其发送到主机,主机会回显 CR和Putty 显示并记录的 LF。主机还会处理当前的输入缓冲区(“abcd”),这可能会产生一些输出。
如您所见,所有这些字符(abvd [BS] SP [BS] [BS] SP [BS] cd CR LF)实际上都来自主机,而 Putty 无法区分哪些字符应该记录,哪些不应该记录。如果您在 Unix 上使用 line-kill(通常为 ^U),至少在我的 CentOS 上,它会根据需要回显(并记录)多个退格键,然后是 erasing-rest-of-line(即 ESCape [ K,其中序列 ESC [ 也称为 CSI 命令序列引入器)。
如果您使用“all”登录并且有可用的 Unix 或类 Unix 实用程序,您可以运行文件col -b
并加上类似的东西sed 's/\x1b\[[0-9]*[A-Z]//'
(如果需要)以获得“最终显示结果”。这还可以修复任何(其他)主机输出,这些输出试图使用加粗,就像 man 和 nroff 之类的东西喜欢做的那样,几十年前在打印终端上通常效果很好。
如果你使用 Telnet,Putty 也支持该协议,但由于不安全,大多数主机不再支持该协议,该协议默认的行为方式相同,但它有一个选项在发送之前在客户端进行行编辑。我不知道 Putty 是否支持此选项,以及哪些主机仍然支持此选项 -- IME 曾经主要在 IBM Univac GE 等“大型”主机上流行,而现在几乎没有人直接使用它们。