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



如何使Expect在执行Expect -c时返回退出状态码而不是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, expect将输出如下行:

expect:"foorn"(spawn_id exp6)匹配glob模式"-re"foo"{exit 17}"?没有之前

因此只需省略期望组的{}
正确的语句应该是:

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

最新更新