我试图弄清楚期望如何工作。AFAIK 期望脚本由“期望”和“发送”语句组成。因此,对于出现在屏幕上的每个适当的“期望”语句,都会调用“发送”语句。命令“interact”也意味着控制权被传回给用户,他能够与终端进行交互。如果我错了,请纠正我。这两个陈述就像一个魅力。
第一个:
#!/usr/bin/expect
spawn ssh -q localhost;
# Handles following message: "Are you sure you want to continue connecting (yes/no)?"
expect "yes";
send "yes\r";
interact;
第二:
#!/usr/bin/expect
spawn ssh -q localhost;
# Handles following message: "pista@localhost's password:"
expect "assword";
send "password\r";
interact;
我在互联网上发现类似以下代码的内容应该将这两个示例合二为一:
#!/usr/bin/expect
spawn ssh -q localhost "uname -a";
expect {
"*yes/no*" { send "yes\r" ; exp_continue }
"*assword:" { send "password\r"; interact }
}
但是此示例在成功登录后立即退出(似乎“交互”在这里不起作用,请参见下面的输出)
[pista@HP-PC .ssh]$ ./fin.exp
spawn ssh -q localhost uname -a
pista@localhost's password:
Linux HP-PC 3.6.6-1.fc16.x86_64 #1 SMP Mon Nov 5 16:56:43 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
[pista@HP-PC .ssh]$ set | grep SHLV
SHLVL=2
三个问题:
- 那些奇怪的期望语法意味着什么,对我唯一可能的解释是,在这个“大”期望中没有强调模式顺序?
- 您能否澄清一下 exp_continue 到底在做什么,在我看来就像“goto”语句期望哪个调用了这个?
- 为什么交互在这里不工作?
非常感谢