如何在 TCL 脚本中执行多行发送命令?

How to execute multiline send command in TCL script?

我是 TCL 脚本的新手,正在尝试使用 spawn 和 send 命令在另一个应用程序中执行以下命令。但是出现以下错误:

    proc otn_line_alarm {} {                                                                                                                                                                                                                                  
        send "table foreach $globalTable row columnName counterValue {          
            if {$columnName== "LOS"  && $counterValue != "clear"} {return 0} } \r ";
         return 1                                                                    
    }   

下面是我遇到的错误

    show otn line alarm 9 
    extra characters after close-quote
        while executing
    "exp_send "table foreach $globalTable row columnName counterValue {
          if {$columnName== "LOS"  && $counterValue != "clear"} {return 0} 
    } \r ";
    r..."

您似乎想将文字字符串发送到生成的命令。在这种情况下,您可以将其括在大括号中而不是双引号中。唯一的问题是 \r 也没有被解释。最简单的解决方案是在单独的命令中发送:

proc otn_line_alarm {} {                                                                                                                                                                                                                                  
    send {table foreach $globalTable row columnName counterValue {          
        if {$columnName== "LOS"  && $counterValue != "clear"} {return 0}
    }}
    send "\r"
    return 1                                                                    
}

如果您确实需要替换一些变量,我会使用格式命令:

proc otn_line_alarm {} {                                                                                                                                                                                                                                  
    send [format {table foreach %s row columnName counterValue {          
        if {$columnName== "LOS"  && $counterValue != "clear"} {return 0}
    }} $globalTable]
    send "\r"
    return 1                                                                    
}