在执行 expect -c 时,如何让 Expect 返回退出状态代码而不是 0 或 1。
例如,执行以下行后,我希望返回“17”,但我得到“0”表示命令成功运行。
expect -c "spawn echo \"foo\"; expect { -re \"foo\" { exit 17 } }"; echo $?
经过一番测试,我发现这是:
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 $?