Как мне восстановить (xterm|gnome-терминал) упаковку после того, как telnet к оборудованию HP испортил это?
Я подключаюсь к своему коммутатору HP (xterm|gnome-терминал). Выход из телнета. Это нарушает поведение терминала. (Если у вас нет переключателя HP на telnet, можно cat
этот файл в терминале вместо).
Теперь введите очень длинную команду (более одной строки) и убедитесь, что вторая строка не переносится на следующую строку, а "остается в текущей строке". Что делает невозможным редактирование предыдущих команд или использование терминала для ничего длиннее одной строки.
Видеть, что cat filewithlonglines.txt
или же git log -p
показывает только первые 80 символов строк длиннее 80 символов.
reset
не работает stty -g > stty.works
запустить телнет, stty $(stty.works)
восстанавливает изменилось stty
настройки, но поведение все еще не работает.
Я должен закрыть терминал и начать новый.:-(
Что я могу сделать кроме reset
а также stty
сохранить / восстановить, чтобы исправить мои сломанные терминалы после телнета?
РЕДАКТИРОВАТЬ: я обнаружил, что если я использую screen
как в одной из этих команд:
screen bash -c "cat hptelnet.escape ; bash"
или же
screen telnet hpswitch
Тогда мой терминал все еще работает должным образом, когда экран выходит. Поэтому обходной путь - поместить экран перед командой, которая портит мой терминал, но я все еще хотел бы знать, как восстановить терминал, который уже испортился...
3 ответа
В конкретном случае проблемы, вызванной переключателями HP, я обнаружил (с помощью script
, который записывает каждый байт, отправленный на терминал), что режим автоматического переноса терминала был отключен с помощью кода VT100 " <ESC>[?7l
"и затем никогда не включается снова. †
Код VT100 для включения автоматического переноса - это " <ESC>[?7h
", который вы можете отправить в терминал с помощью этой команды:
printf "\033[?7h"
Однако это предполагает, что ваш терминал совместим с VT100, что, хотя и является хорошей ставкой, не является достоверным. ‡ Более правильный способ сделать это - положиться на ваши настройки terminfo и выполнить эту команду:
tput smam
который генерирует точно такой же вывод, как указано выше printf
команда, предполагая терминал в стиле VT100. Функция terminfo "smam" - это "Set Mode: Automatic Margins". Его партнером является "rmam": "Режим сброса: автоматические поля".
Кстати, я очень хочу ssh
У меня был параметр конфигурации "LocalEndCommand" (похожий на "LocalCommand"), чтобы я мог просто автоматически запускать этот un-fucker в конце каждого ssh-соединения коммутатора HP.
† Спасибо, HP!
‡ Как вы думаете, HP сделала эту ставку или нет? Я предполагаю, что они сделали, и всегда отправляют коды VT100. В этом случае, если ваш терминал не совместим с VT100, у вас не будет этой проблемы с самого начала.
Кроме того reset
Есть несколько других вещей, которые я всегда стараюсь. И иногда это помогает восстановить здоровье терминала:
resize
(в некоторых системах его нет в $PATH, обычно он находится в / usr / X11 / bin /)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