3

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

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

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

1 回答 1

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在开头添加 a,expect 会输出这一行:

期望:“foo\r\n”(spawn_id exp6)是否匹配全局模式“-re“foo”{exit 17}“?不

所以简单地省略{}期望组。
正确的说法应该是:

expect -c "spawn echo \"foo\"; expect -re \"foo\" { exit 17 }"; echo $?
于 2013-06-10T19:34:47.857 回答