一些Cisco路由器运行称为IOS的操作系统,它具有内置的TCL解释器。我研究了IOS TCL的示例脚本,它在脚本的开头有以下行:
::cisco::eem::event_register_timer cron name crontimer2 cron_entry $_cron_entry maxrun_sec 240
这个$_cron_entry
变量是一个值为0-59/2 0-23/1 * * 0-7
的环境变量,即开头有双冒号的行也可以这样写:
::cisco::eem::event_register_timer cron name crontimer2 cron_entry 0-59/2 0-23/1 * * 0-7 maxrun_sec 240
0-59/2 0-23/1 * * 0-7
是否意味着每隔一小时每隔一分钟执行一次maxrun_sec 240
?如果是,那么maxrun_sec
是什么,因为它没有在脚本本身的任何地方定义。如何理解::cisco::eem::event_register_timer cron name crontimer2 cron_entry
部分?
答案 0 :(得分:2)
这些是命令调用,其中这些命令以完全限定的形式给出。双冒号(::
)是一个命名空间分隔符,并且与文件系统类似,如果名称以分隔符开头,则它将根据全局命名空间进行解析
例如,全局set
命令可以等效地调用::set
。它的工作方式相同。如果您在另一个定义自己的set
命令的命名空间中,这非常有用:
namespace eval example {
proc set {} {
for {::set x 1} {$x <= 5} {incr i} {
puts "This is example::set with x = $x"
}
}
set
}
现在,在您的情况下,该命令以完全限定的形式称为::cisco::eem::event_register_timer
。这应该被视为event_register_timer
命名空间中的eem
命令,该命令本身位于cisco
命名空间中,而后者又是全局命名空间的直接子节点。它与文件名一样,除了它是一个多字符分隔符。
(至于它做什么......查看思科文档。它不是标准的Tcl命令......)