我从我的(xterm | gnome-terminal)远程login到HP交换机。 退出telnet。 这打破了terminal的行为。 (如果您没有HP切换到telnet,则可以在terminal上cat 该文件 )。
现在input一个非常长的命令(多于一行,看到第二行不会换行到下一行,而是“停留在当前行”),这就不可能编辑以前的命令或使用terminal比一行更长的东西。
看到这个cat filewithlonglines.txt或git log -p只显示80个字符以上的前80个字符。
reset不起作用。 stty -g > stty.works ,运行telnet, stty $(stty.works)恢复已更改的stty设置,但行为仍然中断。
我必须closuresterminal并开始一个新的。 🙁
我可以做什么除了reset和stty保存/恢复以修复我的terminal后,一个远程login?
编辑:我发现,如果我使用这些命令之一的screen :
screen bash -c "cat hptelnet.escape ; bash"
要么
screen telnet hpswitch
然后当屏幕退出时,我的terminal仍能正常工作。 所以一个解决方法是把屏幕放在弄乱我的terminal的命令前面,但是我仍然想知道如何恢复已经被搞乱的terminal…
在由惠普交换机引起的问题的特定情况下,我发现(通过使用scriptlogging发送给terminal的每个字节)terminal的自动包装模式是通过VT100代码“ <ESC>[?7l “,然后永远不会再被打开。 †
重新打开自动换行的VT100代码是“ <ESC>[?7h ”,您可以使用以下命令将其发送到terminal:
printf "\033[?7h"
但是,这是假定您的terminal符合VT100标准,而且这是一个不错的select。 ‡更正确的方法是依靠您的terminfo设置并运行此命令:
tput smam
它产生与上述printf命令完全相同的输出,假设一个VT100风格的terminal。 terminfofunction“smam”是“Set Mode:Automatic Margins”。 其合作伙伴是“rmam”:“重置模式:自动保证金”。
顺便说一句,我真的希望ssh有一个“LocalEndCommand”configuration选项(类似于“LocalCommand”),这样我就可以在每个HP交换机的ssh连接结束时自动运行这个非混淆器。
†谢谢,惠普!
‡您认为惠普是否做了这个赌注? 我猜他们做了,总是发送VT100代码。 在这种情况下,如果你的terminal不兼容VT100,你将不会遇到这个问题。
除了reset还有其他一些我总是尝试的东西。 有时它有助于恢复terminal的完整性:
resize (在某些系统上它不在$ PATH中,通常在/ usr / X11 / bin /中find) echo "^v^o" (按CTRL+V ,然后CTRL+O ,这是一个旧的Unix技巧,在我无意中在二进制文件上做了cat之后,经常帮助我。 stty sane 另外试试:
# https://gist.github.com/raw/1294767/a1ea19be2f70b092057a5232c2d05a0ee9bf145b/hptelnet.escape cat hptelnet.escape tput reset # each of the following commands may work as well tput smcup # string to start programs using cup tput is2 # initialization string; init_2string # ... and as a last resort try ... # cf. "The Alternate Character Set", # http://www.in-ulm.de/~mascheck/various/alternate_charset/ # added \033c to clear screen alias vtn='echo "X[mX(BX)0OX[?5lX7X[rX8Xc" | tr "XO" "\033\017"' vtn