我正在通过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有可能吗?提前谢谢!
答案 0 :(得分:3)
如果我理解正确,那么您需要为生成的进程获取#spawn_id。然后,您可以匹配每个进程(期望-i)并关闭每个进程。
这里有一个很好的例子: http://wiki.tcl.tk/16158
我不确定你的密码是什么意思。这适用于每次“hg pull”还是总体而言。
在后一种情况下,您可能希望在整个期望脚本中执行此操作,然后生成与您通信时在运行时存储的密码的子项。