Как мне восстановить (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 Есть несколько других вещей, которые я всегда стараюсь. И иногда это помогает восстановить здоровье терминала:

  1. resize (в некоторых системах его нет в $PATH, обычно он находится в / usr / X11 / bin /)
  2. echo "^v^o" (Нажмите CTRL+V и после CTRL+O, это старый трюк Unix, который очень помог мне после того, как я случайно сделал cat в двоичном файле.)
  3. 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
Другие вопросы по тегам