目前,我正在使用foreach命令从文件中读取主机名,并使用此主机名连接到设备。所有这些都是在我的TCL脚本中完成的。有没有办法可以运行脚本的多个实例,以便分别查询每个设备?像bash脚本类似于:
for hostname in file;
do
log.tcl $hostname &
done
我认为这类似于多线程。 我的另一个问题是,当运行脚本的多个实例,并且每个脚本写入同一个文件时,所有日志都会混乱吗?
答案 0 :(得分:1)
有几种选项可以存档:
foreach hostname $hosts {
exec log.tcl $hostname &
}
这就像bash解决方案。
package require Thread
set pool [tpool::create]
set jobs {}
foreach hostname $hosts {
lappend jobs [tpool::post -nowait $pool [list apply {{host} {
set argv0 log.tcl
set argv [list $host]
source $argv0
} $hostname]]
}
while {[llength $jobs]} {
tpool::wait $pool $jobs jobs
}
请注意expect与线程不兼容。
关于从多个脚本写入同一文件的另一个问题:这取决于。如果您有符合POSIX标准的系统并使用a
打开文件,那么它可能会有效。