在 telnet 到 HP 设备弄乱了它之后,如何恢复 (xterm|gnome-terminal) 包装?

Pet*_*rch 4 terminal telnet stty

我从我的 (xterm|gnome-terminal) telnet 到 HP 交换机。退出远程登录。这打破了终端的行为。(如果您没有连接到 telnet 的 HP 开关,则可以在终端中使用cat 此文件)。

现在输入一个很长的命令(不止一行,并且看到第二行没有换行到下一行,而是“留在当前行”。这使得无法编辑先前的命令或使用终端任何超过一行的内容。

看到cat filewithlonglines.txtgit log -p只显示超过 80 个字符的行的前 80 个字符。

reset不起作用。stty -g > stty.works, 运行 telnet,stty $(stty.works)恢复更改的stty设置,但行为仍然被破坏。

我必须关闭终端并开始一个新的终端。:-(

在 telnet 后,除了保存/恢复以修复损坏的终端之外reset,我还能做什么stty

编辑:我发现如果我screen在以下命令之一中使用like:

screen bash -c "cat hptelnet.escape ; bash"
Run Code Online (Sandbox Code Playgroud)

或者

screen telnet hpswitch
Run Code Online (Sandbox Code Playgroud)

然后我的终端在屏幕退出时仍然正常工作。因此,解决方法是将 screen 放在弄乱我的终端的命令前面,但我仍然想知道如何恢复已经弄乱的终端...

wfa*_*ulk 6

在HP开关引起的问题的具体案例中,我发现(通过使用script,记录发送到终端的每个字节),终端的自动换行模式是通过VT100代码“ <ESC>[?7l”关闭的,然后永远不会被打开重新开始。

重新打开自动换行的 VT100 代码是“ <ESC>[?7h”,您可以使用以下命令将其发送到终端:

printf "\033[?7h"
Run Code Online (Sandbox Code Playgroud)

但是,这假设您的终端兼容 VT100,虽然这是一个不错的选择,但并不确定。 更正确的方法是依靠您的 terminfo 设置并运行以下命令:

tput smam
Run Code Online (Sandbox Code Playgroud)

printf假设使用 VT100 样式的终端,它会生成与上述命令完全相同的输出。terminfo 功能“smam”是“设置模式:自动边距”。它的搭档是“rmam”:“重置模式:自动边距”。

顺便说一句,我真的希望ssh有一个“LocalEndCommand”配置选项(类似于“LocalCommand”),这样我就可以让它在每个 HP 交换机 ssh 连接结束时自动运行这个 un-fucker。


† 谢谢,惠普!

‡ 您认为惠普是否会下这个赌注?我猜他们这样做了,并且总是发送 VT100 代码。在这种情况下,如果您的终端与 VT100 不兼容,您就不会遇到这个问题。