Expect:如何使用无限expect spawn正确关闭bash中的while循环?

Expect:如何使用无限expect spawn正确关闭bash中的while循环?

我有以下脚本:

#!/usr/bin/expect

set timeout 20

set cmd [lrange $argv 1 end]
set password [lindex $argv 0]

eval spawn $cmd

while {1} {
  expect "id_rsa"
  send "$password\r";
}

interact

其目的是期望“id_rsa”并在生成的 $cmd 打开时重复输入密码。

现在脚本可以运行,但总是会以错误结束

send: spawn id expx not open while executing ...

我想以正确的方式编写代码,以便通过检查正确退出 while 循环,而不是通过 Expect 中的错误捕获正确退出,这样错误就不会出现。

提前致谢。

答案1

尝试改变

while {1} {
  expect "id_rsa"
  send "$password\r";
}

interact

expect {
  id_rsa {
    send "$password\r"
    exp_continue         ;# this is the "looping" part
  }
  eof
}

相关内容