スクリプトの最後で自動期待が中断されます。

スクリプトの最後で自動期待が中断されます。

自動期待スクリプトがあります。修正しましたが、うまくいきますが、実行が終了すると操作が中断され、端末をインポートするにはCtrl + Cを押す必要があります。

[..]
887VA#logout
Connection to 10.255.255.1 closed by remote host.
Connection to 10.255.255.1 closed.
root@blackbox:/etc/myscripts#

^Croot@blackbox:/etc/myscripts# ^C
root@blackbox:/etc/myscripts#

上記の空のスペースでEnterキーを数回押しました。

パスワード

#!/usr/bin/expect -f

set force_conservative 0  ;# set to 1 to force conservative mode even if
                          ;# script wasn't run conservatively originally
if {$force_conservative} {
        set send_slow {1 .1}
        proc send {ignore arg} {
                sleep .1
                exp_send -s -- $arg
        }
}

set timeout -1
spawn $env(SHELL)
match_max 100000


send -- "ssh [email protected]\r"
expect -exact "Password: "
send -- "passwordhere!!!\r"
expect -exact "887VA#"
send -- "show interface vlan 2\r"
expect -exact "Vlan2 is up, line protocol is up \r"
send -- "logout\r"
expect eof

答え1

シェルを作成し、sshコマンドを送信し、いくつかのタスクを実行してからsshセッションからログアウトします。シェルを終了しないでください。

私は通常、シェルを生成せずに実際に自分が望むものを生成するように自動的に期待されるスクリプトを編集します。

短く書き直す:

#!/usr/bin/expect -f
# default timeout is 10 seconds
spawn ssh [email protected]
expect -exact "Password: "
send -- "passwordhere!!!\r"
expect -exact "887VA#"
send -- "show interface vlan 2\r"
expect -exact "Vlan2 is up, line protocol is up \r"
send -- "logout\r"
expect eof

スクリプトのロジックについて:ラインプロトコルが次のような場合はどうすればよいですか?いいえ戻る?

関連情報