gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:48:11 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com