我正在测试一个 expect 脚本,发现使用set timeout
vs时有两种不同的行为expect -timeout
。这是一个简单的例子
response.sh
:
#!/usr/bin/bash
sleep 2
echo hello
test1.sh
:
#!/usr/bin/expect
spawn ./response.sh
set timeout -1
expect {
timeout {
send_user "timeout\n"
} "hello" {
send_user "received hello\n"
}
}
输出(按预期工作):
spawn ./response.sh
hello
received hello
然而,当我在期望中使用标志时,-timeout
无论我使用什么超时值,我都不会收到响应:
#!/usr/bin/expect
spawn ./response.sh
expect -timeout 1 {
timeout {
send_user "timeout\n"
} "hello" {
send_user "received hello\n"
}
}
输出:
spawn ./response.sh
我希望timeout
也能在 stdout 中打印出来。我遗漏了什么吗?
答案1
Stack Overflow 帖子中完整解释了这个问题
为什么这不期望处理超时或 eof。
简而言之,该-timeout
标志应在 Expect 模式之前使用,而不是在操作上使用。使用此标志,您已发出信号以覆盖全局timeout
变量,但仅此而已。
-timeout 1
您的代码应该按照括号后面而不是括号前面进行重新排列。
请参阅链接的帖子以获取示例和更详细的解释。