我使用此期望文件(keygen.exp)生成SSH密钥,我使用ssh-keygen作为示例来测试“期望”:
#!/usr/bin/expect
spawn ssh-keygen
expect "Enter file"
send "./id_rsa\r"
expect "Enter passphrase"
send "\r"
expect "Enter same passphrase"
send "\r"
interact
它运行完美,但是,如果每次运行的输入提示顺序都不相同,并且在不同的运行中可能会有不同的问题,该怎么办?
我想要这样的东西:
#!/usr/bin/expect
spawn ssh-keygen
expect if-is "Enter file"
send "./id_rsa\r"
expect if-is "Enter passphrase"
send "\r"
expect if-is "Enter same passphrase"
send "\r"
interact
有可能吗?
答案 0 :(得分:3)
您可以有一个Expect语句,该语句循环,以不同方式处理不同的输出,例如:
expect {
"Enter file" {
send "./id_rsa\r"
exp_continue
}
"Enter passphrase" {
send "\r"
exp_continue
}
"Enter same passphrase" {
send "\r"
exp_continue
}
$
}
但是请注意,您需要一些方法来打破循环。这里的最后一个模式-$
没有exp_continue
(或任何其他操作),因此它将如果登录时提示您包含{{1 }}。
请参阅https://www.tcl.tk/man/expect5.31/expect.1.html
答案 1 :(得分:0)
以任何顺序进行预期,并具有无限的超时时间:
#!/usr/bin/expect
spawn /path/to/some-programme
expect {
"some string" {
set timeout -1
send "some input\r"
exp_continue
}
"some other string" {
set timeout -1
send "some other input\r"
exp_continue
}
...
}
#no 'interact'
#end of file