bash 读取管道中的 netcat 状态然后退出

bash 读取管道中的 netcat 状态然后退出

我不明白如何在以太网连接不稳定的两台主机之间正确设置数据传输。

这是我的/simple/bash/script.sh

#!/bin/bash


while [ true ]; do
    cat /dev/virtual  | nc -v 192.168.1.1 5005 || echo "nc failed" && exit   
    sleep 5s
done

exit

如果我手动启动它并且在目的地netcat没有运行它会说:

5005 (tcp) failed: Connection refused

但它不会退出。

我需要以另一种方式:

  1. 检查netcat连接是否正常。
  2. 然后管道cat /dev/virtual

有没有办法捕获netcat状态,然后failed: connection refused重新启动主 bash 脚本?

答案1

这应该有效:

#!/bin/bash

if ! nc -z 192.168.1.1 5005 ; then
    sleep 1 && "$0" & exit;
fi

nc -v 192.168.56.203 5005 < /dev/virtual

解释:

  • nc -z会检查对方是否有人在听
  • 如果没有人在听,程序将休眠 1 秒(显然你可以更改它),然后它将启动自身的另一个实例并退出
  • 如果有人正在听,那么程序将发送/dev/virtual

相关内容