3

下面的代码现在运行良好;但是,它是串行执行的。我希望能够滚动 source_list 文件,直到我获得最大数量的会话并让它们全部完成并将结果反馈给这个父脚本。这是可能的还是需要我更改我正在调用的脚本以反馈结果?我已经查看了 fork 命令,但它有点让我难以理解。

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
4

2 回答 2

2

您真正需要的是:

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 中,因此您的循环不会因返回代码而被阻塞。

ps auxw但是,您将用户名和密码作为 CLI 参数发送,因此当有人这样做或类似情况时,它们也会显示在进程表中。我会将用户名/密码与您的 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的附加信息:

事实证明,上述答案中缺少的信息是评估变量,以便正确传递它。

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

*请注意,{*}仅适用于 TCL 8.5 及更高版本。

在以下找到答案:如何在 tcl 中向 exec 添加可变数量的参数?

于 2012-06-15T02:12:09.413 回答
1

事实证明,上述答案中缺少的信息是评估变量,以便正确传递它。

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

*请注意,{*}仅适用于 TCL 8.5 及更高版本。

在以下找到答案:如何在 tcl 中向 exec 添加可变数量的参数?

于 2012-06-20T04:20:53.340 回答