Exception 条件为'时的异常操作;t遇见

Exception 条件为'时的异常操作;t遇见,exception,tcl,expect,Exception,Tcl,Expect,我正在尝试生成一个except脚本,该脚本仅在命令执行时不存在字符串时才会执行操作:示例: send -- "sys set -nd\r" expect "showdebugcommands" {} "\n$PROMPT" {send -- "sys set showdebugcommands 1\r"} 我想做的是:如果cmd输出中存在“showdebugcommands”,则不执行任何操作,但如果不存在,则执行命令“sys set showdebugcommands 1” 我如何使用exp

我正在尝试生成一个except脚本,该脚本仅在命令执行时不存在字符串时才会执行操作:示例:

send -- "sys set -nd\r"
expect "showdebugcommands" {} "\n$PROMPT" {send -- "sys set showdebugcommands 1\r"}
我想做的是:如果cmd输出中存在“showdebugcommands”,则不执行任何操作,但如果不存在,则执行命令“sys set showdebugcommands 1”

我如何使用expect实现这一点

试试这个

set seen false
expect {
    "showdebugcommands" {set seen true; exp_continue}
    "\n$PROMPT" 
}
if { ! $seen} {
     send -- "sys set showdebugcommands 1\r"
}

一种方法是将
expect
嵌套在
expect
中。这是完全合法的

send -- "sys set -nd\r"
expect {
    "showdebugcommands" {
        expect "\n$PROMPT"
    }
    "\n$PROMPT" {
        send -- "sys set showdebugcommands 1\r"
        expect "\n$PROMPT"
    }
}

这样做的目的是在看到您想要的东西后,将活动返回到已知状态(提示显示)。从代码单元的角度考虑总是一个好主意,代码单元可以将事情恢复到已知状态。(正因为如此,我还在内部的
发送
之后添加了另一个
expect
提示;让我们回到外部
expect
末尾的“我刚刚看到提示”状态,因为这是最不疯狂的选项。)

谢谢glenn!我不知道为什么,在执行cmd后出现“showdebugcommands”字时,IF语句没有触发。我可能会错过什么?这不是你想要的吗?你说过如果看到这个词你什么都不想做。那是我的错。资本化。。。谢谢你的帮助。工作得很好。