使用expect执行远程脚本并获取脚本退出状态

使用expect执行远程脚本并获取脚本退出状态

我有一个位于远程服务器上的脚本,它返回脚本的退出状态。现在我想使用 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)系统调用(可能是waitpidwait4;这些可能是也可能不是相同的手册页,具体取决于 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
$ 

相关内容