bash はパイプから netcat 状態を読み出して終了します。

bash はパイプから netcat 状態を読み出して終了します。

不安定なイーサネット接続を使用する2つのホスト間のデータ転送を正しく設定する方法を理解できません。

これは私のものです。/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 refusedbashスクリプトを再起動する方法はありますか?

答え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

関連情報