condition in expect bash;如果失败,退出代码1



我正试图为其中一个单元测试创建一个条件。我已经检查了其他的例子,但他们似乎不适合我。条件如下:

expect -c "
spawn virsh --connect qemu:///system console ${name} --force
....
set ret 0
....      
expect {
"OK"{
send " r"
}
"FAIL"{
set ret 1
send " r"
}

}

退出美元ret

但是,它返回ret: unbound变量并中断脚本。有什么办法吗?

我看到两个问题:

  1. 您使用双引号"来包围整个expect程序,但您也在带引号的程序中使用它们。最简单的解决方法是将外部引号更改为单个',因此从expect -c '

    开始
  2. expect命令中,您需要在每个模式和动作之间设置一个空格,即将"OK"{更改为"OK" {,类似地更改为"FAIL"例子。

(实际上你甚至不需要引号,OK {就可以了,但它们不会造成任何伤害。)