Telnet経由でデバイスに自動的にログインするexpectスクリプトを作成しようとしています
Expectコマンドに複数の可能性がない場合、スクリプトは正常に機能し、デバイスにログインします。
#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]
spawn telnet $ip $port
expect "'^]'." sleep .1;
send "\r";
sleep .1;
expect "login:"
send "$user\r"
expect "Password:"
send "$password\r";
interact
上記のスクリプトは正常に機能し、正しいパラメーターを渡すと正常にログインします。しかし、expectコマンドに(エラー処理のために)ブランチを追加すると、スクリプトはlogin:
プロンプトでスタックします。しばらくすると、出力されます スクリプトエラー 何か助けはありますか?以下の誤ったスクリプト。
#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]
spawn telnet $ip $port
expect "'^]'."
sleep .1;
send "\r";
expect
{
"login:"
{
send "$user\r"
expect "Password:"
send "$password\r";
interact
}
"Host: Connection refused"
{
send_user "ERROR:EXITING!"
exit
}
}
PS:このスクリプトは、デバイスにさまざまなビルドイメージをロードするための追加のプロンプトを待つためにさらに開発されます。 telnet(コンソール)接続のみが機能します。したがって、sshはオプションではありません。
私の悪い。問題は中括弧にありました。それらはexpectコマンドと同じ行にあるはずです。