telnet 到 HP 設備搞砸後,如何恢復 (xterm|gnome-terminal) 包裝?
我從我的 (xterm|gnome-terminal) 遠端登錄到 HP 交換機。退出遠端登錄。這破壞了終端的行為。(如果您沒有 HP 切換到遠端登錄,則可以在終端中
cat
將此文件改為)。現在輸入一個很長的命令(多於一行,並看到第二行沒有換行到下一行,而是“停留在目前行”。這使得無法編輯先前的命令或使用終端任何超過一行的東西。
看到
cat filewithlonglines.txt
或git log -p
只顯示比 80 個字元長的行的前 80 個字元。
reset
不起作用。stty -g > stty.works
,執行 telnet,stty $(stty.works)
恢復更改stty
的設置,但行為仍然不正常。我必須關閉終端並開始一個新的。:-(
reset
telnet 後,除了stty
保存/恢復來修復損壞的終端,我還能做什麼?**編輯:**我發現如果我
screen
在這些命令之一中使用 like :screen bash -c "cat hptelnet.escape ; bash"
或者
screen telnet hpswitch
然後螢幕退出時我的終端仍然可以正常工作。所以一種解決方法是將螢幕放在弄亂我的終端的命令前面,但我仍然想知道如何恢復已經被弄亂的終端……
在HP開關引起的問題的具體情況下,我發現(通過使用
script
記錄發送到終端的每個字節),終端的自動換行模式是通過VT100程式碼“<ESC>[?7l
”關閉的,然後永遠不會被打開重新開始。†重新打開自動換行的 VT100 程式碼是“
<ESC>[?7h
”,您可以使用以下命令將其發送到終端:printf "\033[?7h"
但是,這假設您的終端符合 VT100 標準,這雖然是一個不錯的選擇,但並不確定。‡ 更正確的方法是依靠您的 terminfo 設置並執行以下命令:
tput smam
printf
假設是 VT100 風格的終端,它會生成與上述命令完全相同的輸出。terminfo 功能“smam”是“設置模式:自動邊距”。它的伙伴是“rmam”:“重置模式:自動邊距”。順便說一句,我真的希望
ssh
有一個“LocalEndCommand”配置選項(類似於“LocalCommand”),這樣我就可以讓它在每個 HP switch ssh 連接結束時自動執行這個 un-fucker。† 謝謝,惠普!
‡ 您認為惠普是否下注?我猜他們做到了,並且總是發送 VT100 程式碼。在這種情況下,如果您的終端不兼容 VT100,那麼您一開始就不會遇到這個問題。