expect -timeout 与 expect 中的“set timeout”:不同的行为

expect -timeout 与 expect 中的“set timeout”:不同的行为

我正在测试一个 expect 脚本,发现使用set timeoutvs时有两种不同的行为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您的代码应该按照括号后面而不是括号前面进行重新排列。

请参阅链接的帖子以获取示例和更详细的解释。

相关内容