linux - 如何将退出状态从 Expect 传播到其父 Bash 脚本?

标签 linux bash shell expect exit-code

我有一个 bash 脚本,exec.sh 之类的

some command
expect test.exp
continue other command

在 test.exp 文件中,我有这样一个片段:

while {[gets $cmds command]>=0} {
  send "$command\r"
  expect {
    "*OK*" {puts $vout $command}
    "*fail*" {puts $iout $command}
    "*blocked*" { what should I put here????}
    }  
  }

所以我想把一些东西放在大括号中,以便执行退出 test.exp 并向 bash 脚本 exec.sh 发出信号,因此 exec.sh 也退出 我的想法是设置一个外部变量,然后在 exec.sh 中使用“if”判断语句

有什么想法吗?谢谢!

最佳答案

从 Expect 传递退出状态

Tcl(因此还有 Expect)有一个带有参数的 exit 命令。参数是进程的退出状态。由您为退出状态分配含义,并从您的 shell 脚本测试退出状态。例如,使用 /usr/include/sysexits.h 中的值,您可以这样写:

expect {
  "blocked" { exit 69 }
}

然后在您的脚本中测试该值。

Shell 中退出状态的分支

最后一个进程的退出状态存储在$?多变的。测试这一点的一种方法是使用 case 语句,并相应地进行分支。例如:

expect test.exp
case $? in
  69)
    # Handle the exit status, and then propagate the same exit status
    # from the shell script.
    echo 'service unavailable' > /dev/stderr
    exit 69
    ;;
esac

关于linux - 如何将退出状态从 Expect 传播到其父 Bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13998941/

相关文章:

c++ - 更多 Poll() ?'s

bash - 如何在 docker 容器中生成核心文件?

linux - 关于 PID Shell 脚本

linux - 如何在 shell 脚本中从第 3 行等中减去第 1 行和第 2 行中的数据?

python - 从 Python 内部设置 LD_LIBRARY_PATH

linux - 从 LAME 和 FLAC 获取输出以显示在 bash 对话框中

linux - 如何从纯文本中 grep 键值存储中的值

python - 如何从 bash shell 提示符运行带有句子作为命令行参数的 python 程序

windows - ETS/Mnesia RAM 表中官方/建议/允许的最大记录数(或 RAM 表大小)

bash - 如何修剪每第n行?