当前位置: 首页 > 面试题库 >

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

裴良弼
2023-03-14
问题内容

我试图执行一个脚本,该脚本执行一个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退出。

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


问题答案:

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

期望脚本是

 [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

再次感谢格伦..



 类似资料:
  • 我试图执行一个脚本,该脚本执行一个EXPECT脚本和一个包含退出代码的派生进程。但是我无法将生成的进程的退出代码获取到主脚本。我总是得到零作为成功。 expect脚本是: 衍生脚本: Expect脚本的执行: 问题是,我无法获取生成的退出返回代码以期望脚本。我希望生成的脚本的退出代码为3到主脚本,主脚本应该以退出代码3退出。 请帮助我将生成的退出代码添加到主脚本。

  • 问题内容: 我使用Expect运行测试脚本。通过退出代码测试返回成功/失败。但期望返回等效的退出代码。如何使期望返回正确的退出状态? 我的测试是使用 psql (postgresql命令处理器)运行的sql脚本。由于psql不允许将数据库密码指定为命令行参数,因此需要 脚本来 执行。 因此,我的期望脚本如下所示: 问题答案: 您已经在循环结束时等待了,您只需要使用和结果即可: 以0退出。 以1.退

  • 问题内容: 目的:使用指定的参数调用外部应用程序,然后退出脚本。 以下脚本无法正常工作: 尝试过的事情:-不分离。提前谢谢了 问题答案: 从node.js文档中: 默认情况下,父级将等待分离的子级退出。为防止父级等待给定的子级,请使用child.unref()方法,并且父级的事件循环将其引用计数中不包括该子级。 使用detached选项启动长时间运行的进程时,除非该进程提供了未连接到父级的stdi

  • 问题内容: 我正在编写几个Java程序,在完成我想做的所有事情之后,需要在单独的JVM中终止/清理工作。为此,我将需要获取要创建的Java进程的PID。 问题答案: 在Windows和Unix上均可使用。您可以使用从Java程序中调用此命令。的样本输出如下 您可能需要对此进行解析,然后检查标准名称,然后从相应的行中获取pid。

  • 本文向大家介绍C# 获取进程退出代码的实现示例,包括了C# 获取进程退出代码的实现示例的使用技巧和注意事项,需要的朋友参考一下 我需要写一个程序,让这个程序知道另一个程序是否正常退出,于是就需要获取这个进程的退出代码 在程序如果需要手动退出,可以设置当前的退出代码 这时的程序运行就退出,同时退出的代码就是 -100 这和 C 语言的在 main 函数返回值一样 在 C# 如果想要实现 C 语言的

  • 问题内容: 在Jenkinsfile Groovy脚本阶段,假设我要发出一个Linux命令来输出字符串的行和列,并想要在特定行的输出中获取第n列。这样的命令的一个示例是“ ls -al”。所以我这样做正确吗? 但是,如何获取本质上为$ {COL [4]}的值,该值是“ ls -al”命令的第五列,即目录大小? 谢谢! 问题答案: 您在示例中显示的bash脚本不会返回正确的目录大小。它将以递归方式返