Вам нужны альтернативные шаблоны в операторах ожидаемого, где вы хотите отлавливать ошибки. Если вы ищете конкретное сообщение об ошибке, вы можете указать это, в качестве альтернативы просто укажите обработчик тайм-аута, который в конечном итоге сработает, когда нормальный вывод не появится.
Например. после send \"$pass\r\"
вместо expect \">\"
попробуйте:
expect \">\" {} timeout {puts stderr {Could not log in}; exit}
т. если ожидаемый результат поступает до истечения времени ожидания (по умолчанию 10 секунд), ничего не предпринимайте и продолжайте, в противном случае вы получите жалобу и выйдите из ожидаемого значения. Вам также может понадобиться шаблон eof для соответствия случаю окончания сеанса ssh.
Обратите внимание, что поскольку вы не производите подстановку переменных в ожидаемом порядке, вам не нужно \ "\" в строках, вы можете использовать {} или даже ничего, когда это одно слово, например. expect conf
и send {no pager}
.
Кстати, я согласен с bstpierre, что было бы чище, если бы вы бросили bash и выполнили все ожидания, но если bash сделает свою работу, то все в порядке.