Posted to tcl by zmoment at Wed May 10 18:29:26 GMT 2023view pretty
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" ${1+"$@"}
proc receive {fd host} {
if {[eof $fd]} {
chan configure $fd -blocking 1
if {[catch {close $fd} err info]} {
puts "$host :::: [dict get $info -errorcode]"
}
incr ::pipe_exit
} elseif {[gets $fd line] >= 0} {
#puts "$host: $line"
}
}
set pipe_exit 0
set hostnames [list devuan alpine 192.168.1.253]
foreach host $hostnames {
set pipe [open |[list ping -W 3 -c 1 $host]]
chan configure $pipe -blocking 0
chan event $pipe readable [list receive $pipe $host]
}
while {$pipe_exit < [llength $hostnames]} {
vwait pipe_exit
}