Ожидать не совпадает
У меня был ожидаемый сценарий, который работал; он содержал следующие строки:
expect "\[Y\]\> "
send "n\r"
Изменилась ОС, с которой я взаимодействую, теперь у меня смешанная среда коробок. У некоторых теперь есть "[Y]>", у некоторых - "[1]>" в точке, с которой я пытаюсь разобраться.
Я попытался изменить код на:
expect {
"\[Y\]\> " { send "n\r";exp_continue }
"\[1\]\> " { send "2\r";exp_continue }
}
Однако, работая в отладке, я вижу:
"Choose the password option:
1. Mask passwords
2. Plain passphrases
[1]>
expect: does "s...ses\r\n[1]> " (spawn_id exp5) match glob pattern "[Y]> "? no
"[1]> "? no
expect: timed out"
Я не понимаю, почему исправленный код не работает, либо для "[Y]>", либо для "[1]> ", когда "[Y]>" сопоставлялось до того, как было введено выражение "else".
1 ответ
Решение
Проблема в том, чтобы избежать квадратных скобок, Tcl
,
# Using braces for pattern
expect {
{\[Y]>} {puts Y}
{\[1]>} { puts 1}
}
# or
# Using double quotes
expect {
"\\\[Y]>" {puts Y}
"\\\[1]>" { puts 1}
}
Мы не должны избегать закрывающей скобки ]
и символ >