我正在尝试在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的问题
谢谢!
答案 0 :(得分: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嵌入在像路由器这样的环境中时,事情很可能已经被改变了很多。 (这并不是说路由器厂商很难做到这一点。)这意味着命令中令人惊讶的差异肯定会发生,并且你应该检查你已经获得的文档并继续进行一些思考,而不是盲目地相信什么我写道。