我正在尝试使用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。即便这样也无济于事。在这方面的任何建议对我都有很大的帮助。 非常感谢你回答这个问题。
答案 0 :(得分:0)
两种方法:
在缓冲区满了时写出缓冲区
首先,在脚本的 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
工作少得多,请使用log_file
记录您关注的部分。
不要打扰match_max
和
set file "/tmp/b"
# ...
log_file $file
send "$data\r"
expect {
"end_expect" exit
}
expect_eof