2012-06-15 32 views
2

下面的代码现在很好用;然而,它是连续执行的。我希望能够遍历source_list文件,直到获得最大数量的会话,并让它们全部完成并将结果反馈给此父代脚本。这是可能的还是需要我改变我打电话来反馈结果的脚本?我已经看过叉子命令,但它有点逃避我。预计中的并行处理

set source_list [lindex $argv 0] 

set device_list [open $source_list r] 
while {[gets $device_list ipaddress] != -1} { 
spawn "./ios-upgrade.exp" 0 $ipaddress username password image-file MD5hash ftp-server 
expect eof 
} 
close $device_list 
+0

有没有什么建议可以以一种最有意义分割你的'source_list'文件分割成多个部分的简单方法? (例如,'split -l'可以分割你的输入文件吗?) – sarnold

+0

我的输入文件实际上只是一个IP地址列表。所以我只是循环将其提供给脚本。 – rsaturns

+0

你还有问题吗,还是解决了你的疑虑? –

回答

0

您真正需要的是:

exec ./ios-upgrade.exp 0 $ipaddress username password image-file MD5hash ftp-server & 
## No need for an expect statement here since you didn't spawn... 

exec背景在shell脚本,以便你的循环不会被阻止返回码结尾的&字符。

但是,您正在发送用户名和密码作为CLI参数,因此他们也会在进程表中显示有人做ps auxw之流。我会存储用户名/密码与您的IP地址相同的文件,并使用:

exec ./ios-upgrade.exp 0 $ipaddress image-file MD5hash ftp-server & 
## No need for an expect statement here since you didn't spawn... 

ios-upgrade.exp步骤完成后,已经写了一个名为东西文件中像ip_4_1_12_18.out并通过目录遍历,直到你接收到的状态为所有的IP地址。


OP的附加信息:

原来缺少的资料片上面的答案是EVAL此变量,它被正确地传递。

exec ./ios-upgrade.exp 0 {*}$ipaddress image-file MD5hash ftp-server & 

*请注意,{*}只适用于TCL 8.5及以上。

找到答案如下所示:How to add a variable amount of arguments to exec in tcl?

+0

我试图将用户名和密码存储在同一个列表中。然而,问题是它会读取整行内容,并且不会按照正确的顺序为被调用的脚本执行变量。 请参见下面的输出: 通过了以下文件: 192.168.1.2 testuser的testpassword 产卵SSH [email protected]。2 testuser testpassword 不管是什么原因它正在执行0图像文件“获得的结果”它应该执行0“得到的结果”image-file MD5hash ftp-server – rsaturns

+0

给了我一个良好的开端。我将发布关于变量替换的后续问题。 – rsaturns

1

原来缺少的一条信息到上述答案是EVAL可变因此它被正确地传递。

exec ./ios-upgrade.exp 0 {*}$ipaddress image-file MD5hash ftp-server & 

*请注意,{*}只适用于TCL 8.5及以上。

发现在以下答案:How to add a variable amount of arguments to exec in tcl?

+0

我抓挠我的头为什么我的答案没有被选中,给出了我所说的关于评估和背景任务 –

+0

@MikePennington我正在看你在下面发布的答案,它是90%的东西让我在那里,但你没有似乎提及eval或{*}。如果你不介意我编辑你的答案,包括上面的一些信息,使其更加完整,我会很乐意接受你的答案。 – rsaturns

+0

要么'exec'或'eval'应该可以工作。我无法访问您的脚本,因此我无法完全审查所有问题。我在回答中包含了您的修改内容。感谢您将此视为一种选择。 –