Ожидать не совпадает

У меня был ожидаемый сценарий, который работал; он содержал следующие строки:

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}
}

Мы не должны избегать закрывающей скобки ] и символ >

Другие вопросы по тегам