我希望能够通过 screenrc 或在会话中配置屏幕会话,使其行为类似于 xterm 终端。目前我有一个 ac# 应用程序,它使用 ssh.net 库从 Windows 机器 ssh 到 Linux 机器,我在该机器上附加到屏幕会话并发送命令并接收回复。如果我附加到屏幕会话与我未附加到屏幕会话时相比,我会看到同一命令的两种不同类型和响应。为了演示这个问题,我将使用 putty 终端复制该问题并记录数据。
- 从 Windows 打开一个腻子终端
- 更改 Session->Logging 设置并选择 SSH Packets,同时浏览到保存 putty.log 文件的位置
- 设置您的 IP 地址并连接到 Linux 机器
- 登录后,发出以下命令 printf "abc\6\n",该字符串包含一个 ack 字符
- 响应将打印 abc 当然它不会显示 \6 因为它不是可打印字符
- 打开 putty.log 文件,您将看到响应数据包数据包含 \6,这是正确的行为。
- 现在通过发出以下命令创建会话:screen -dmS test
- 通过发出以下命令附加到会话:screen -Rr test
- 再次发出以下命令 printf "abc\6\n"
- abc 将按预期打印,但是如果您查看 putty.log 中的响应数据包数据,它将不再具有 \6 字符
- 我可以通过管道这样的命令来解决这个问题 printf "abc\6\n" | cat -v 将 \6 转换为可打印形式并在屏幕上显示 ^F,我宁愿在我的数据包数据中接收 \6,这不是一个理想的解决方案,但至少它为我的问题提供了一个解决方案。
以下是我无法解决的更严重的问题。为了演示,请执行以下操作:
- 从 Windows 打开一个腻子终端
- 更改 Session->Logging 设置并选择 SSH Packets 并浏览到保存 putty.log 文件的位置
- 设置您的 IP 地址并连接到 Linux 机器
- 登录后,通过发出以下命令更改 stty 设置(告诉终端不要用回车替换新行):stty -onlcr
- 然后发出命令 ls -al,
- putty.log 文件将包含没有额外字符的正确数据集。
- 现在通过发出以下命令创建会话:screen -dmS test
- 通过发出以下命令附加到会话:screen -Rr test
- 再次发出以下命令 stty -onlcr
- 再次发出 ls -al
- 如果您查看 putty.log 中的响应数据包数据,您会看到在收到一定数量的数据包后,响应将在每个响应前面包含额外的字符。额外字符采用以下格式 [13C. [ 和 C 之间的数字不同。
我想让我的响应与标准 xterm 终端的行为方式相同,为什么会有差异,是否有办法配置屏幕以获得与 xterm 类型的终端一致的响应。