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

Bra*_*ith 3 bash tcl expect

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

例如,在执行以下行之后,我希望返回"17",但是我得到"0"表示命令成功运行.

expect -c "spawn echo \"foo\"; expect { -re \"foo\" { exit 17 } }"; echo $?
Run Code Online (Sandbox Code Playgroud)

Joh*_*uhn 5

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

expect -c "spawn echo foo; expect \"\n-re . {puts OK}\""
Run Code Online (Sandbox Code Playgroud)

这相当于以下Expect脚本:

spawn echo foo; expect {
-re . {puts OK}}
Run Code Online (Sandbox Code Playgroud)

按预期工作.但如果你删除\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 $?
Run Code Online (Sandbox Code Playgroud)