我试图创建一个except脚本,只有在命令执行中不存在字符串时才会执行操作:示例:
send -- "sys set -nd\r"
expect "showdebugcommands" {} "\n$PROMPT" {send -- "sys set showdebugcommands 1\r"}
我想要做的是:如果" showdebugcommands" cmd输出中存在但是如果它不存在,则执行命令" sys set showdebugcommands 1"。
我如何使用expect实现这一目标?
答案 0 :(得分:2)
试试这个
set seen false
expect {
"showdebugcommands" {set seen true; exp_continue}
"\n$PROMPT"
}
if { ! $seen} {
send -- "sys set showdebugcommands 1\r"
}
答案 1 :(得分:0)
执行此操作的一种方法是在expect
内嵌套expect
。这是完全合法的。
send -- "sys set -nd\r"
expect {
"showdebugcommands" {
expect "\n$PROMPT"
}
"\n$PROMPT" {
send -- "sys set showdebugcommands 1\r"
expect "\n$PROMPT"
}
}
目的是在看到你想要的东西之后将活动耗尽回到已知状态(提示显示)。从代码单元的角度思考将事物带回已知状态总是一个好主意。 (正因为如此,我还在内部expect
之后添加了另一个send
提示符;让我们将它全部恢复到外部结尾的“我刚刚看到提示符”的状态expect
因为这是最不可思议的选择。)