範囲外に予想されるバッファを保存しますか?

範囲外に予想されるバッファを保存しますか?

私の予想されるスクリプトでは、他のプロンプトが表示されるまでスペースバーの送信を使用していますが、私がやっている方法でスクリプトの範囲を超えている可能性があります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"}
}

おすすめ記事