次のスクリプトがあります。
#!/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
}