То, что вы видите, является ударом от согласования терминала, потому что вы не работаете в реальном терминале. (Строго говоря, вы - это волшебство ожидаемого - но оно не ведет себя так, как обычный терминал.)
Самое простое решение - установить терминал на что-то другое, прежде чем запустить сеанс telnet
, например ::
.
#!/usr/bin/expect --
set env(TERM) dumb
spawn telnet 192.168.100.100
# Rest of your script goes here ...
В качестве альтернативы, вы можете попытаться правильно ответить на запрос на вход в режим VT102 и отчет о местоположении курсора (что выглядит как большая работа), или вы можете переписать свой код, чтобы он делал все внутри interact
( который соединяет другой конец с реальным терминалом, внутри которого вы работаете). Но если установка переменной среды исправляет это, зачем переходить ко всем этим дополнительным хлопотам?
(NB: я предлагаю установить терминал на dumb
здесь, но ключ в том, что вы хотите, чтобы самый глупый терминал работал. Глухие терминалы идеальны, потому что они примерно полностью глупо, чтобы было легко притвориться им ...)