期待 - 期待互动期待

时间:2014-07-04 13:45:51

标签: expect

我想"听"对于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中正常工作..

建议任何人?

1 个答案:

答案 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
}