从内联Expect命令返回退出状态代码

时间:2013-06-10 19:03:23

标签: bash tcl expect

在执行expect -c时,如何使Expect返回退出状态代码而不是0或1。

例如,在执行以下行之后,我希望返回“17”,但我得到“0”表示该命令已成功运行。

expect -c "spawn echo \"foo\"; expect { -re \"foo\" { exit 17 } }"; echo $?

1 个答案:

答案 0 :(得分:5)

经过一点点测试后我发现了这个:

expect -c "spawn echo foo; expect \"\n-re . {puts OK}\""

等同于以下Expect脚本:

spawn echo foo; expect {
-re . {puts OK}}

按预期工作。但如果删除\n,它将失败。因此,当参数的第一个字符是新行时,Expect仅使用多行语法。否则它会尝试使用它进行匹配,在您的情况下,它会尝试匹配-re "foo" { exit 17 }。如果您在开头添加exp_internal 1,则会输出以下行:

expect: does "foo\r\n" (spawn_id exp6) match glob pattern " -re "foo" { exit 17 } "? no

因此,只需省略期望组的{} 正确的陈述应该是:

expect -c "spawn echo \"foo\"; expect -re \"foo\" { exit 17 }"; echo $?