Я кстати предупреждаю, что expect -- порядочная наколенная паделка.
Там многое через ()() и пару раз из-за этого всё бросал и
переписывал на чистом Tcl. Там какие-то малопонятные глюки если его
заставить работать с сокетами во-первых. Во-вторых фокусы вроде
того, что он переменные устанавливает (по факту парсинга) в каком
попало скоупе: может в локальном (процедуры), может в глобальном.
Когда пишешь скрипт (без процедур) и всё глобальное -- оно не
заметно. Но когда начинаешь нормально программировать приходится расставлять костыли из "global" и "upvar/uplevel".
Да, там в комплекте ещё autoexpect есть -- для тех кто хочет обойтись без программирования. Для простых случаев даже работает.