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

관련 정보