0

我有一个 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”判断语句

有什么想法吗?谢谢!

4

1 回答 1

2

从 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
于 2012-12-22T18:12:49.777 回答