В вашем первом скрипте команда expect -exact...
"успешно" с таймаутом . Время ожидания по умолчанию составляет 10 секунд, а действие по умолчанию - ничего не делать. Таким образом, команды ждут 10 секунд, соответствуют тайм-ауту и возвращаются, поэтому мы продолжаем со следующей командой.
Вы можете явно указать время ожидания:
expect {
-exact "process returned with 0" {}
timeout { puts "timeout!"; exit 1 }
}
Чтобы избежать ожидания по тайм-ауту,Вы можете использовать регулярное выражение, которое будет соответствовать $?
0 или 1 (или другим числам). Если вы поместите часть регулярного выражения в группу захвата ()
, вы сможете найти его во встроенной переменной $expect_out(1,string)
:
expect -re {process returned with ([0-9]+)}
set returncode $expect_out(1,string)
puts "we got $returncode"
exit $returncode
Обратите внимание, регулярное выражение использует кавычки в стиле {}
, поскольку""
кавычки не позволяют использовать []
внутри них.