출력을 토글할 수 있는 "IP 릴레이 장치"에 TCP 메시지를 보내는 작은 명령을 만들었습니다.
printf "setstate,1:1,1\r" | nc ip.ip.ip.ip port
때로는 이것이 실제로 잘 작동하는 경우도 있습니다. printf는 Linux와 Mac 모두에서 작동하므로 netcat으로 뭔가를 해야 한다고 생각했습니다. netcat에서 -v를 사용하면 올바른 실행 횟수가 향상된다는 것을 알았지만 매우 지루한 해결 방법처럼 보였습니다.
나중에 1초의 시간 제한을 추가하는 nc -i 옵션을 발견했습니다. 이 옵션은 아직 오류(Linux 또는 OSX에서)를 일으키지 않았지만 실행 시간을 단축하기는 하지만 여전히 100% 깨끗한 수정은 아닙니다.
이것매뉴얼 페이지실제로 nc 명령을 파이프할 수 있음을 보여주지만 가능한 경쟁 조건은 언급하지 않습니다.
이것이 예상되는 동작입니까? 이 문제를 해결할 수 있는 깨끗한 방법이 있습니까? (예: "--연결이 완료될 때만 보내기") 아니면 실제로 경쟁 조건인지 확인할 수 있나요?
답변1
활성 연결이 있는지 확인할 수 있습니다.
nc -v <HOST> <PORT> </dev/null; echo $?
위 명령이 값을 반환하면 0
연결이 성공한 것이며 printf
메시지를 보낼 수 있습니다. 그렇지 않으면(값은 1
) 연결이 거부되었거나 시간 초과되었음을 알 수 있습니다.