2016-11-11 9 views
0

Я хочу получить приглашение удаленного устройства.Как захватить подсказку с терминала с помощью Tcl или как я могу совместить запрос с цветовым кодом?

-regexp {[\$\#]\s*$} { 
     # capture the prompt 
} 

"[\ $ #] \ s * $" не работает для приглашения с цветовыми кодами.

+1

Запустите свой сценарий с 'expect -d', чтобы включить подробный вывод отладки и покажите нам, где совпадение не выполняется. Ожидание должно показать вам, как выглядит запрос. –

+1

Один из методов, которые я иногда использую, - это явно задать приглашение при входе в систему 'spawn ssh ...; отправьте «PS1 = '>' \ r"; expect -re {> $} ' –

ответ

0

Цветовые коды отправляются как 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 {> $} 

Цветные подсказки достаточно хороши для людей, но они неловкие для сценариев. Переопределение сделает вашу жизнь намного проще. (Вы также можете попробовать установить терминал на тип терминала, который не поддерживает цвета.)

+0

Мне нужен этот скрипт для работы на разных платформах, включая * nix, windows и т. д. PS1 = '>' \ r" не будет работать на всех этих платформах. Мне просто нужно взять подсказку вместо этого? – user3837980

 Смежные вопросы

  • Нет связанных вопросов^_^