使用tcl生成多个telnet并分别记录输出 [英] Spawn multiple telnet with tcl and log the output separately
本文介绍了使用tcl生成多个telnet并分别记录输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用spawn&远程登录到多台服务器我想将每个文件的输出记录在单独的文件中. 如果我将spawn与'logfile'一起使用,则它正在登录到同一文件中.但我想在其他文件中使用它.这该怎么做?
I'm trying to telnet to multiple servers with spawn & i want to log the output of each in a separate files. If i use the spawn with 'logfile' then, it is logging into a same file. But i want to have it in different files. How to do this?
推荐答案
我已经从链接中找到了一些内容
I have found something from the link
LogScript.tcl
LogScript.tcl
#!/usr/bin/tclsh8.5
package require Expect
proc log_by_trace {array element op} {
uplevel {
global logfile
set file $logfile($expect_out(spawn_id))
puts -nonewline $file $expect_out(buffer)
}
}
array set spawns {}
array set logfile {}
# Spawn 1
spawn ./p1.sh
set spawns(one) $spawn_id
set logfile($spawn_id) [open "./log1" w]
# Spawn 2
spawn ./p2.sh
set spawns(two) $spawn_id
set logfile($spawn_id) [open "./log2" w]
trace add variable expect_out(buffer) write log_by_trace
proc flush_logs {} {
global expect_out
global spawns
set timeout 1
foreach {alias spawn_id} [array get spawns] {
expect {
-re ".+" {exp_continue -continue_timer}
default { }
}
}
}
exit -onexit flush_logs
set timeout 5
expect {
-i $spawns(one) "P1:2" {puts "Spawn1 got 2"; exp_continue}
-i $spawns(two) "P2:2" {puts "spawn2 got 2"; exp_continue}
}
p1.sh
#!/bin/bash
i=0
while sleep 1; do
echo P1:$i
let i++
done
p2.sh
#!/bin/bash
i=0
while sleep 1; do
echo P2:$i
let i++
done
它运行良好:)
这篇关于使用tcl生成多个telnet并分别记录输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文