在expect脚本中截断缓冲区

时间:2016-02-11 13:33:47

标签: output buffer expect truncated

我正在尝试使用expect脚本从远程服务器收集信息。为了记录目的,我抑制屏幕上的输出并将其重定向到本地服务器中的文件。这是我用过的脚本。这是将输出存储在本地文件中,但是日志被截断。

#!/usr/bin/expect
log_user 0
set password [lindex $argv 0]
set user [lindex $argv 1]
set host [lindex $argv 2]
set timeout -1
set file "/tmp/b"
set fp [open "/tmp/gather_info" r]
set data [read $fp]
spawn ssh $user@$host
expect "*?assword:*"
send "$password\r"
expect "*$*"
send "su - oracle\r"
expect "*oracle*"
send "$data\r"
expect {
    "end_expect" exit
}
expect eof
match_max 10000
puts $file $expect_out(buffer)

我也试过在期待之后使用match_max。即便这样也无济于事。在这方面的任何建议对我都有很大的帮助。 非常感谢你回答这个问题。

1 个答案:

答案 0 :(得分:0)

两种方法:

  1. 在缓冲区满了时写出缓冲区

    首先,在脚本的 start 处设置match_max。然后

    set file "/tmp/b"
    set log [open $file w]
    # ...
    send "$data\r"
    expect {
        full_buffer {puts $log $expect_out(buffer); exp_continue}
        "end_expect" exit
    }
    puts $log $expect_out(buffer)
    close $log
    expect_eof
    
  2. 工作少得多,请使用log_file记录您关注的部分。

    不要打扰match_max

    set file "/tmp/b"
    # ...
    log_file $file
    send "$data\r"
    expect {
        "end_expect" exit
    }
    expect_eof