"命令名称无效"在期待脚本

时间:2016-03-21 10:58:06

标签: tcl expect

我有以下代码用于在串口侦听:

set timeout -1
log_user 0

set port [lindex $argv 0]

spawn /usr/bin/cu -l $port

proc receive { str } {
  set timeout 5
  expect
  {
    timeout { send_user "\nDone\n"; }
  }
  set timeout -1
}

expect {
  "XXXXXX\r" { receive $expect_out(0,string); exp_continue; }
}

为什么会给出

  

命令名称无效"

程序中超过5秒超时后出现

错误?嵌套期望好吗?

1 个答案:

答案 0 :(得分:3)

问题在于:

  expect
  {
    timeout { send_user "\nDone\n"; }
  }

Newline在Tcl脚本中很重要!当你单独使用expect时,它只是等待超时(并处理任何期望你设置的背景;在这种情况下没有)。下一行,你正在等待的东西被解释为一个命令,它有一个非常奇怪的名字(包括换行符,空格等),这根本不是你想要的。

你真正想做的是:

  expect {
    timeout { send_user "\nDone\n"; }
  }

通过将括号放在与expect相同的行上,您将获得您(可能)预期的行为。