0

我有一个期望脚本,它将文件中的配置命令提供给路由器。我将进程记录到一个文件中,但是期望在配置文件结束之前停止写入日志。例如,如果配置文件有

q
r
s
吨
你
v
w
X
是的
z
eof

日志将包含直到 u 的所有交互,但其余的不在日志中,但似乎该过程一直到 z 完成。通常的文件比较结束似乎不起作用,所以我尝试了以下方法。

    set ok 0;
    while { $ok == 0 } {
      set line [ gets $config ];


       expect  { 
            "#" { send -s "$line\r"; }
            -re "\[.]" { send -s "$line\r"; }
        }
         if { $line == "eof" } {
           set ok 1;
        } else { }

   }
   close $config

它开始将 ok 设置为 1 并离开 while 语句,但脚本在此之前停止记录。

4

1 回答 1

0

完成时间是否太长?我问的原因可能是由于不匹配期望语句中的任何一个选项而导致超时(第一个选项匹配'#'提示......第二个选项应该匹配什么?),在这种情况下,在期望时间之后在每次传递中,代码仍然会扫描配置文件中的所有行,并最终到达 eof 并将 ok 设置为 1。

这是我要做的:

  • 在脚本的开头包含expect_internal 1某处,以便了解正在发生的事情
  • 在您设置后删除分号并发送语句...... afaik expect 不使用那些(我认为它会抱怨!)
  • 在您的期望语句中添加一个timeout选项(第三个选项),如果它到达那里,可能会相应地打印一些东西

我假设您说的命令列表是“qrstuvwxyz eof”不是单行命令,而是每行一个命令,对吗?

另外,我假设你set config [open "/path/to/filename.txt"]的脚本顶部有一个地方,你没有在你的片段中显示它吗?

exp_internal 1如果您需要帮助,请随时发布添加后获得的任何内容。

于 2013-10-28T23:23:21.490 回答