在执行expect -c时,如何使Expect返回退出状态代码而不是0或1。
例如,在执行以下行之后,我希望返回“17”,但我得到“0”表示该命令已成功运行。
expect -c "spawn echo \"foo\"; expect { -re \"foo\" { exit 17 } }"; echo $?
答案 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 $?