私の予想されるスクリプトでは、他のプロンプトが表示されるまでスペースバーの送信を使用していますが、私がやっている方法でスクリプトの範囲を超えている可能性がありますexp_continue
。$expect_out(buffer)
スクリプトは
#!/usr/bin/expect -f
# Set variables
set timeout 300
set SWITCH [lindex $argv 0]
# Its busy time
spawn ssh -o "StrictHostKeyChecking no" $SWITCH -luser
match_max 100000000
expect {
"*assword:"
}
send "password\r"
expect "*>"
send "show run\r"
expect {
"*More*" {send -- " ";exp_continue}
"*>" {send -- "exit\r"}
}
set fid [open $SWITCH.conf w+]
set out $expect_out(buffer)
puts $fid $out
マイシェルの出力には完全な出力が表示されます(ファイルに書き込まれると予想される内容は下から切り捨てられます)。
no telnet server
username admin password .....
username user privilege 5 password .....
!
!
hitless-failover enable
!
end
SSH@TELCO-STACK>
ただし、put行で作成されたファイルには、次の内容のみが含まれます。
^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H
!^M
!^M
!^M
end^M
^M
SSH@TELCO-STACK>
stdoutの完全な(正しい)出力を見ると、^ Hと出力の最後の数行だけがファイルに書き込まれるのはなぜですか?
答え1
予想されるマニュアルページには次のように記載されています。
パターン(またはeofまたはfull_buffer)を一致させた後、一致した出力と以前に一致しなかった出力は変数に保存されます
expect_out(buffer)
。
つまり、キャラクターだけが得られます。前回「もっと見る」以降。
次のコマンドが必要な場合がありますlog_file
。
#!/usr/bin/expect -f
set timeout 300
set SWITCH [lindex $argv 0]
spawn ssh -o "StrictHostKeyChecking no" $SWITCH -luser
match_max 100000000
expect "*assword:"
send "password\r"
expect "*>"
log_file /some/log/file
send "show run\r"
expect {
"*More*" {send -- " ";exp_continue}
"*>" {send -- "exit\r"}
}