予想:無限予測生成を使用してbashでwhileループを正しく閉じる方法は?

予想:無限予測生成を使用して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 ...

エラーが発生しないように、Expectでエラーをキャッチして正しく終了するのではなく、チェックしてwhileループが正しく終了するように正しい方法でコードを書きたいと思います。

よろしくお願いします。

ベストアンサー1

変更を試す

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

interact

到着

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

おすすめ記事