如何在expect编程中中断ping命令而不等待其完整输出?

如何在expect编程中中断ping命令而不等待其完整输出?

我对编程很陌生。在我的脚本中,我需要运行多个 ping 命令。

我正在运行下面提到的命令:ping $ip rep 100 size 1500

如果连接成功,那么一切都很好,但如果 ping 响应不会出现,那么它将继续 ping 设备直到 100 次,这会花费很多时间。如果我得到如下命令的输出,我想将其中断并切换到下一个命令:

输入转义序列以中止。发送 100 个 1500 字节的 ICMP Echos 到 $ip,超时为 2 秒:......

我尝试使用正则表达式和不同的 ASCII 代码来破坏它,但所有其他选项仅在对设备进行 100 次 ping 后才起作用。

任何帮助,将不胜感激。

答案1

一种选择可能是timeout设置整个命令的最大持续时间。因此,您可以ping运行 100 次 ping,但如果它无法在 200 秒(总计)内完成,那么它将退出。

timeout 200 ping $ip rep 100 size 1500

答案2

这是未经测试的:

spawn ping ...
expect {
    "Type escape sequence to abort. Sending 100, 1500-byte ICMP Echos to $ip, timeout is 2 seconds:" {
        send -- "\x03"  ;# send Ctrl-C
        exp_continue
    }
    eof
}

答案3

仅 ping 预定义的次数怎么样?例如

 ping -c 5

相关内容