如何使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 $?