3

スクリプトを実行して、expect を使用して Procurve 4204vl スイッチに接続しようとしています。これは私が作成したコードです:

#!/usr/bin/expect -f
set timeout 20
spawn ssh -l user 192.168.0.10 
expect "user@192.168.0.10's password:"
send "1234"
send "\r"
expect "Press any key to continue" 
send "j\r"
send "conf"
send "\r"
send "no ip route 89.19.238.2 255.255.255.255 192.168.0.12"
send "\r"
send "exit"
send "\r"
send "exit"
send "\r"
send "exit"
send "\r"
expect "Do you want to log out [y/n]?"
send "y"

これを単に を使用して実行しましexpect script.expたが、問題は次のエラーが発生したことです。

  1. ルートは削除されません
  2. スクリプトの実行が終了した後、画面に次のエラーが表示されました。

    "expect "Do you want to log out [y/n]?"" 内から呼び出された "y/n" を実行中に無効なコマンド名 "y/n" を続行するには、任意のキーを押します (ファイル "script.exp" 19 行目)。

では、どうすればこの問題を解決できますか? ありがとうございました。

"exit"PS: すべての行とログアウトの質問にコメントを付けてから、"interact"コマンドの最後の行を追加すると、スクリプトは正常に動作します。

4

2 に答える 2

2

ルートが削除されていない場合、プログラムはどのような出力を提供しますか? ルーターからのエラーが表示されますか?

expect と Tcl では、角括弧はコマンドを実行するための構文であり、シェルのバッククォートとまったく同じです。最も簡単な解決策は、二重引用符の代わりに中括弧を使用して、コマンドの補間を防ぐことです。

expect {Do you want to log out [y/n]?}

中括弧は、シェル内で単一引用符のように機能します。

于 2012-12-12T15:47:37.190 に答える