Не удается запустить ожидаемый сценарий: недопустимое имя команды «Да / Нет» - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть ожидаемый сценарий, который должен выполнить какой-то другой сценарий оболочки, чтобы принять лицензионное соглашение

#!/usr/bin/expect
spawn ./xxx.sh
expect -ex "--More--"
send -- " "
expect "Do you agree with this license ?[Yes/No]"
send "Y\r"

Но когда я запускаю его, я получаю эту ошибку

invalid command name "Yes/No"
while executing
"Yes/No"
invoked from within
"expect "Do you agree with this license ?[Yes/No]""
(file "./xxx.sh" line 5)

Я не знаю, что я делаю не так

1 Ответ

0 голосов
/ 10 ноября 2018

Ожидается, это расширение языка Tcl. В Tcl вы используете квадратные скобки для подстановки команд . Как и командная оболочка bash, подстановка команд происходит внутри строк в двойных кавычках.

Чтобы код не пытался выполнить команду Yes/No:

  1. использовать разные кавычки: Tcl использует фигурные скобки в качестве не интерполирующих кавычек:

    expect {Do you agree with this license ?[Yes/No]}
    
  2. снять скобки, чтобы предотвратить подстановку команд:

    expect "Do you agree with this license ?\[Yes/No\]"
    
...