我想"听"对于shell输出的字符串,在"交互"模式。或者我想以某种方式模拟交互模式,这仍然允许我从shell中侦听特定的字符串。
似乎interact
只监听用户输入(我按下的键),而不是shell返回的内容。
每次看到特定的字符串时,我如何让Expect执行某些操作,但是否则让我以交互方式使用shell?
示例:
proc yay {} {
send_user "Yay\n"
}
trap { # trap sigwinch and pass it to the child we spawned
set rows [stty rows]
set cols [stty columns]
stty rows $rows columns $cols < $spawn_out(slave,name)
} WINCH
spawn bash
interact {
interact -re "HOT" {
yay
}
expect {
fuzz yay
}
}
如果我运行它并键入&#34; HOT&#34;它以&#34; Yay&#34;回应。正如所料,它读了我的钥匙。但如果我输入
echo fuzz
&#34;期待&#34;子句没有被触发。另外&#34; echo HOT&#34;也不会触发任何东西。
这是可能的,还是我错过了什么。也许我需要在某种类型的&#34;期待,继续&#34; -loop中模仿interact
。重要的是一切都在shell中正常工作..
建议任何人?
答案 0 :(得分:4)
您可以使用expect_background
命令。来自man page:
采用与预期相同的参数,但它会立即返回。每当新输入到达时都会测试模式。
您可以像这样修改初始脚本:
#!/usr/bin/expect
proc yay {} {
send_user "Yay\n"
}
trap { # trap sigwinch and pass it to the child we spawned
set rows [stty rows]
set cols [stty columns]
stty rows $rows columns $cols < $spawn_out(slave,name)
} WINCH
spawn bash
expect_background {
fuzz yay
}
interact -re "HOT" {
yay
}