-1

我正在尝试在 GNS3 中的 Cisco 路由器上运行 tcl 脚本;

SanJose1(tcl)#foreach address {
+>192.168.1.1
+>192.168.1.2
+>172.16.224.5
+>172.16.224.6
+>192.168.72.1
+>172.16.224.2
+>172.16.224.1
+>10.2.1.1
+>10.2.2.1
+>} { ping $address }

当我这样做时,没有任何反应,没有 ping,没有错误,它只是返回到路由器提示符。我是否错误地运行代码?如果它是正确的,那么我可以调查 GNS3 的问题

谢谢!

4

1 回答 1

0

foreach正如您在问题中所写的那样, 看起来是正确的。(如果还有一个参数,你会从问题标题中得到消息,但你的代码示例不应该生成那个。)ping你调用的更有可能没有写任何可见的东西,而只是产生结果为字符串。这在 Tcl 代码中很常见。假设我的诊断是正确的,我希望这样的事情能够奏效:

foreach address {
    192.168.1.1
    192.168.1.2
    172.16.224.5
    172.16.224.6
    192.168.72.1
    172.16.224.2
    172.16.224.1
    10.2.1.1
    10.2.2.1
} {
    puts [ping $address]
}

为了清楚起见,我省略了提示并添加了缩进和更多换行符。如果ping确实是外部命令,exec ping $address请改用(依赖未知命令处理将外部命令引入代码被认为是不好的形式,尤其是在脚本模式下禁用时。)使用外部命令,您可能还想通过带有数字的-c选项,以便将使用的请求数量限制为相当小的数量,也许:

puts [exec ping -c 5 $address]

请注意,Tcl 解释器支持的命令集可以完全更改通过设计),并且文档中列出的命令实际上只是预先提供的标准库。当 Tcl 嵌入到像路由器这样的环境中时,很可能事情已经发生了相当大的变化。(对于路由器供应商来说,这并不难。)这意味着肯定会发生命令中的惊人差异,并且您应该检查您拥有的文档并稍微考虑一下,而不是盲目地相信什么我写。

于 2014-01-30T00:03:04.890 回答