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

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

0 голосов
/ 05 октября 2018

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

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 Ответ

0 голосов
/ 05 октября 2018

Проблема заключается в том, что необходимо экранировать квадратные скобки, характерные для Tcl.

# Using braces for pattern
expect {
    {\[Y]>} {puts Y}
    {\[1]>} { puts 1}
}
# or 
# Using double quotes
expect {
    "\\\[Y]>" {puts Y}
    "\\\[1]>" { puts 1}
}

Нам не нужно экранировать закрывающую скобку ] и символ >

...