Цветовые коды отправляются как escape-последовательности в потоке символов. Таким образом, если у вас их есть, вам нужно их сопоставить. Каждая escape-последовательность представляет собой символ ESC (Esc, , \u001b
), за которым следуют различные символы, заканчивающиеся на ;
(ну, это цветовые настройки, есть и другие, и они несколько сложны). Хотя да, вы могли бы сопоставить их с более сложным регулярным выражением, намного проще установить подсказку на что-то простое, что вы контролируете.
# ...
expect "ssword: "
send $password\r
# Note, *NO* expect at this point as matching it is hard
send "PS1='> '\r"
expect -regexp {> $}
Цветные подсказки достаточно хороши для людей, но они неловкие для сценариев. Переопределение сделает вашу жизнь намного проще. (Вы также можете попробовать установить терминал на тип терминала, который не поддерживает цвета.)
Запустите свой сценарий с 'expect -d', чтобы включить подробный вывод отладки и покажите нам, где совпадение не выполняется. Ожидание должно показать вам, как выглядит запрос. –
Один из методов, которые я иногда использую, - это явно задать приглашение при входе в систему 'spawn ssh ...; отправьте «PS1 = '>' \ r"; expect -re {> $} ' –