Я подключаюсь к коммутатору HP по telnet с моего (xterm | gnome-terminal). Выйдите из Telnet. Это нарушает поведение терминала. (Если у вас нет коммутатора HP для telnet, можно cat
этот файл вместо этого в терминале).
Теперь введите очень длинную команду (более одной строки, и вы увидите, что вторая строка не переносится на следующую строку, а «остается в текущей строке». Это делает невозможным редактирование предыдущих команд или использование терминала для что-нибудь длиннее одной строки.
Видеть, что cat filewithlonglines.txt
или git log -p
показывает только первые 80 символов строки длиннее 80 символов.
reset
не работает. stty -g > stty.works
, запустите telnet, stty $(stty.works)
восстанавливает изменено stty
настройки, но поведение по-прежнему нарушено.
Мне нужно закрыть терминал и запустить новый. :-(
Что я могу делать кроме reset
и stty
сохранить / восстановить, чтобы исправить мои сломанные терминалы после telnet?
РЕДАКТИРОВАТЬ: Я обнаружил, что если я использую screen
как в одной из этих команд:
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»), так что я мог просто автоматически запускать этот un-fucker в конце каждого ssh-соединения коммутатора 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