스크립트에서 netcat을 사용하는 데 문제가 있습니다 bash
.
명령을 보낸 후 특정 출력을 일치시키고 가능한 한 빨리 스크립트 실행을 계속하고 싶습니다(netcat 시간 초과를 기다리지 않고).
$> echo 'my_command' | nc -q 10 <IP> <PORT> | grep -m 1 EXPECTED_OUTPUT
# ISSUE: Closes the connection quite instantly
$> echo $?
$> 1 # grep did not get (yet) the output of nc
또 다른 시도:
$> echo 'my_command' | nc -w 1 <IP> <PORT> | grep -m 1 EXPECTED_OUTPUT
Binary file (standard input) matches
# ISSUE: Wait until the timeout expires
$> echo $?
$> 0
자세한 내용은:
명령이 없으면 netcat은 배너 메시지를 인쇄합니다.
$>nc <IP> <PORT>
welcome message
나는 다른 도구들에 반대할 것이 없다( telnet
,...)
표준을 준수하는 솔루션을 원합니다 bash
.
-w 1
예상되는 메시지는 1초 이내에 도착해야 하므로 타임아웃을 사용했습니다.nc
답변1
nc
일단 완료되면 grep
죽도록 설정하고 싶습니다 . 한 가지 방법은 다음과 같습니다.
( subshell_pid=$BASHPID ; echo 'my_command' | nc $IP $PORT > >(grep -m 1 EXPECTED_OUTPUT ; kill -13 -- -$subshell_pid ; ) )
이 모든 것은 서브쉘에서 실행되고 grep
완료되면 서브쉘에 의해 시작된 모든 프로세스를 종료합니다.
이것은>()
프로세스 교체, 하나의 명령에서 여러 명령으로 전송할 수 있습니다.