如何使用Expect包装产生多个进程的脚本?

时间:2011-07-13 12:52:43

标签: mercurial passwords expect

我正在通过ssh运行“hg fpull”。我想用密码只提供它。是的,我知道ssh-keygen,但Expect对我来说更合适。

所以,这是脚本:

#!/usr/bin/expect

stty -echo
send_user "Password: "
expect_user -re "(.*)\n"
set password $expect_out(1,string)
send_user "\n"
stty echo

spawn hg fpull -u --snapfile <snapfile>
expect {
    "Password:" { send "$password\r"; exp_continue; }
}
interact

问题是“hg fpull”会产生一个从新存储库中提取的新进程。一个新的过程让Expect退出了周期......

那么,如何应对呢? Expect有可能吗?提前谢谢!

1 个答案:

答案 0 :(得分:3)

如果我理解正确,那么您需要为生成的进程获取#spawn_id。然后,您可以匹配每个进程(期望-i)并关闭每个进程。

这里有一个很好的例子: http://wiki.tcl.tk/16158

我不确定你的密码是什么意思。这适用于每次“hg pull”还是总体而言。

在后一种情况下,您可能希望在整个期望脚本中执行此操作,然后生成与您通信时在运行时存储的密码的子项。