我有一个位于远程服务器上的脚本,它返回脚本的退出状态。现在我想使用 Expect 执行该远程脚本并获取脚本的退出状态。
我的远程服务器脚本
#!/usr/bin/ksh
echo "Test script"
exit 1
我在本地服务器上的期望脚本
#!/usr/bin/ksh
expect -c "
log_user 0
spawn ssh abc@abc /var/tmp/test.ksh
expect { password:test }
log_user 1
expect 100%
"
期望脚本的输出
Test script
但我也想要我的远程脚本的退出状态,即1。我如何使用expect 来实现这一点。
答案1
某些wait(2)
系统调用(可能是waitpid
或wait4
;这些可能是也可能不是相同的手册页,具体取决于 unix 的风格)获取退出状态字。这expect
是通过手册页wait
中记录的过程公开的expect(1)
。例如,可以编写一个以伪随机退出代码退出的进程,并且该值从 的返回值中获得wait
。
#!/usr/bin/env expect
spawn -noecho \
expect -c {set code [expr { int(100*rand()) }]; puts "hi $code"; exit $code}
expect -ex "hi"
expect eof
set exunt [wait -i -1]
puts $exunt
set child_exit_code [lindex $exunt end]
puts $child_exit_code
运行时应该产生类似的结果
$ expect ./expectexitcode
hi 78
700 ðӶ 0 78
78
$