2016-08-26 3 views
0

Ich habe eine Liste mit FTP-Servern. ändern kann dies immerloop list von global

listet:

set ftp1 "192.168.0.12 -u test,test" 
set ftp2 "192.168.0.13 -u test,test" 
set ftp3 "192.168.0.14 -u test,test" 

und hier einen tcl-Code, ich möchte in der tcl einen Blick mit allen ftps aus einer Liste nicht sequentiell exec aber multipliziert

set ftp1 "192.168.0.12 -u test,test" 
set ftp2 "192.168.0.13 -u test,test" 
set ftp3 "192.168.0.14 -u test,test" 

proc search {nick host handle channel text} { 
    global ftp1 ftp2 ftp3 
    set text [stripcodes bcru $text] 
    set searchtext [lindex [split $text] 0]; 
    set ftp1 "192.168.0.12 -u test,test" 
    set results [exec sh f.sh $ftp1 $searchtext] 
    foreach elem $results { 
     putnow "PRIVMSG$channel :ftp1 $elem" 
    } 
} 
+0

Willkommen zu Stapelüberlauf, überprüfen Sie bitte diesen Link http://StackOverflow.com/Help/Dont-ask und dieses http://StackOverflow.com/Tour, um zu lernen, wie man eine gute Frage stellt. – pedrouan

Antwort

0

Die Die einfachste Sache ist, noch ein paar Hilfsprozeduren zu schreiben. Diese Prozeduren sollten die Suche nach einer Site durchführen und die Ergebnisse durch einen Rückruf an Ihren Code zurückgeben (da wir hier von asynchroner Verarbeitung sprechen).

# This is a fairly standard pattern for how to do async reading from a pipeline 
# Only the arguments to [open |[list ...]] can be considered custom... 

proc searchOneHost {hostinfo term callback} { 
    set pipeline [open |[list sh f.sh $hostinfo $term]] 
    fconfigure $pipeline -blocking 0 
    fileevent $pipeline readable [list searchResultHandler $pipeline $callback] 
} 
proc searchResultHandler {pipeline callback} { 
    if {[gets $pipeline line] >= 0} { 
     uplevel "#0" [list {*}$callback $line] 
    } elseif {[eof $pipeline]} { 
     close $pipeline 
    } 
} 

# The rest of this code is modelled on your existing code 

set ftp1 "192.168.0.12 -u test,test" 
set ftp2 "192.168.0.13 -u test,test" 
set ftp3 "192.168.0.14 -u test,test" 

proc search {nick host handle channel text} { 
    set searchtext [lindex [split [stripcodes bcru $text]] 0] 
    foreach v {ftp1 ftp2 ftp3} { 
     upvar "#0" $v ftp 
     searchOneHost $ftp $searchtext [list report $channel $v] 
    } 
} 
proc report {channel name found} { 
    foreach elem $found { 
     putnow "PRIVMSG$channel :$name $elem" 
    } 
} 

habe ich nur #0 zitiert hier um den Textmarker zu arbeiten.

+0

cool, big thx, ich werde heute testen, grüße – rmounton

+0

big thx working perferct. – rmounton