期待发送到其他进程

时间:2015-01-10 21:47:02

标签: tcl expect

我有一个期望脚本执行以下操作:

Spawns a.sh - > a.sh等待用户输入

Spawns b.sh - >跑步和完成

我现在想要向a.sh发送输入但是难以使其正常工作。

以下是我的预期脚本

 #!/usr/bin/expect
    spawn "./a.sh"
    set a $spawn_id
    expect "enter"

    spawn "./b.sh"
    expect eof

    send -i $a "test\r"

a.sh是

read -p "enter " group
echo $group
echo $group to file > file.txt

和b.sh是

echo i am b
sleep 5
echo xx

2 个答案:

答案 0 :(得分:1)

基本上,expect将使用两个可行的命令,例如sendexpect。在这种情况下,如果使用send,则必须在之后拥有expect(在大多数情况下)。 (反之亦然,不要求是强制性的)

这是因为没有它我们将错过生成过程中发生的事情,因为expect将假设您只需要发送一个字符串值而不期望会话中的任何其他内容。

以下代码

send "ian\n"

我们必须让expect等待事情发生。您已使用expect eof来生成进程a.sh。同样,它也可以为b.sh衍生过程添加。

“那么,为什么interact有效?”我听说过你

它们都以相同的方式工作,除了interact期望来自用户的一些输入作为交互式会话。它显然希望你。但是,您当前的shell脚本不是为获取输入而设计的,它最终会退出,因为脚本中没有更多的代码,这就是您看到正确输出的原因。或者,即使单独使用expect代码(即使没有eof)也可以做到这一点。

查看expect's man page了解更多信息。

答案 1 :(得分:0)

我刚刚使用

工作了
spawn "./a.sh"
set a $spawn_id
expect "enter"

spawn "./b.sh"
expect eof

set spawn_id $a
send "ian\n"

interact

我现在的问题是为什么你最后需要互动?