gpt4 book ai didi

linux - expect + 如何识别 expect break 因为超时?

转载 作者:IT王子 更新时间:2023-10-29 00:46:27 34 4
gpt4 key购买 nike

下面这个简单的 expect 脚本的目标是获取远程机器上的 hostname 名称

有时期望脚本无法执行到 $IP_ADDRESS 的 ssh(因为远程机器不活动等)

所以在这种情况下,expect 脚本将在 10 秒后中断(超时 10),这没问题,但是......

有两种选择

  1. 期望脚本成功执行 ssh,并在远程机器上执行命令 hostname
  2. 预期脚本中断,因为超时为 10 秒

在这两种情况下,expect 都会退出

  • 如果 ssh 成功,预计会在 0.5-1 秒后中断,但如果 ssh 失败,则它会在 10 秒后中断

但是我不知道expect脚本是否成功执行ssh?

是否可以识别超时过程?还是验证 expect 因超时而结束?

备注我的Linux机器版本-red-hat 5.1

期望脚本

 [TestLinux]# get_host_name_on_remote_machine=`cat << EOF
> set timeout 10
> spawn ssh $IP_ADDRESS
> expect {
> ")?" { send "yes\r" ; exp_continue }
>
> word: {send $PASS\r}
> }
> expect > {send "hostname\r"}
> expect > {send exit\r}
> expect eof
> EOF`

我们没有连接到远程主机的示例

 [TestLinux]# expect -c  "$get_host_name_on_remote_machine"
spawn ssh 10.17.180.23
[TestLinux]# echo $?
0

最佳答案

要在超时时做一些明智的事情,你需要告诉 expect 应该发生什么:

set timeout 10
expect {
")?" { send "yes\r" ; exp_continue }
"word:" { send "$PASS\r" }
timeout { puts "timed out during login"; exit 1 }
}
set timeout -1 ; # Infinite...
expect ">" { send "hostname\r" }
expect ">" { send "exit\r" }
expect eof
exit

请注意上面我遇到错误时如何使用 exit 1。您的 shell 将能够通过 $? 等获取它。(如果没有 1 参数,exit 命令将导致脚本“成功”终止;如果你从脚本的底部掉下来,也会发生同样的情况。)

关于linux - expect + 如何识别 expect break 因为超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9655384/

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