一尘不染

如何在Expect Shell脚本中获取生成的进程的退出代码?

linux

我试图执行一个脚本,该脚本执行一个EXPECT脚本和一个生成的进程,其中包含退出代码。但是我无法将生成的进程的退出代码获取到主脚本。作为成功,我总是零。

期望脚本是:

 [Linux Dev:anr ]$ cat testexit.sh
 #!/bin/bash
 export tmp_script_file="/home/anr/tmp_script_temp.sh"
 cp /home/anr/tmp_script $tmp_script_file
 chmod a+x $tmp_script_file
 cat $tmp_script_file
 expect << 'EOF'
 set timeout -1
 spawn  $env(tmp_script_file)
 expect {
 "INVALID "  { exit 4 }
 timeout     { exit 4 }
 }
 EOF
 echo "spawned process status" $?
 rm -f $tmp_script_file
 echo "done"

产生的脚本:

 [Linux Dev:anr ]$ cat tmp_script
 exit 3

执行Expect脚本:

 [Linux Dev:anr ]$ ./testexit.sh
 exit 3
 spawn /home/anr/tmp_script_temp.sh
 spawned process status 0
 done

问题是我无法获得生成的退出返回代码以期望脚本。我希望生成脚本的退出代码3到主脚本,并且主脚本应该以退出代码3退出。

请帮助我将生成的退出代码获取到主脚本。


阅读 603

收藏
2020-06-07

共1个答案

一尘不染

在格伦的帮助下,我得到了解决方案..我的最终脚本是::

期望脚本是

 [Linux Dev:anr ]$ cat testexit.sh
 #!/bin/bash
 export tmp_script_file="/home/anr/tmp_script_temp.sh"
 cp /home/anr/tmp_script $tmp_script_file
 chmod a+x $tmp_script_file
 cat $tmp_script_file
 expect << 'EOF'
 set timeout -1
 spawn  $env(tmp_script_file)
 expect {
 "INVALID "  { exit 4 }
 timeout     { exit 4 }
 eof
 }

 foreach {pid spawnid os_error_flag value} [wait] break

 if {$os_error_flag == 0} {
     puts "exit status: $value"
     exit $value
 } else {
     puts "errno: $value"
     exit $value
 }
 EOF
 echo "spawned process status" $?
 rm -f $tmp_script_file
 echo "done"

产生的脚本:

 [Linux Dev:anr ]$ cat tmp_script
 exit 3

执行Expect脚本:

 [Linux Dev:anr ]$ ./testexit.sh
 exit 3
 spawn /home/anr/tmp_script_temp.sh
 exit status: 3
 spawned process status 3
 done

再次感谢格伦..

2020-06-07