![netcat을 사용하여 프로그램을 시작하시겠습니까? [복사]](https://linux55.com/image/59249/netcat%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84%20%EC%8B%9C%EC%9E%91%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
netcat이 PC1(IP: 10.0.0.1)의 특정 포트를 수신하도록 한다고 가정해 보겠습니다.
PC1:~$ nc -l 9999
PC2(IP:10.0.0.2)에서 연결하고 일부 문자열을 보냅니다.
PC2:~$ nc 10.0.0.1 9999
hello
touchit
test
what's up
touchit
bye
PC2에서 "touchit"을 보낼 때마다 "touch test.txt" 명령이 PC1에서 실행되도록 PC1의 첫 번째 명령을 어떻게 수정합니까?
표준 명령과 파이프를 영리하게 조합하여 이를 수행하는 것이 좋을 것입니다. 물론 "touch test.txt"는 어떤 명령으로도 대체될 수 있습니다. PC2에서 보낸 다른 명령 문자열을 사용하여 다른 프로그램을 시작할 수도 있다면 좋을 것입니다.
답변1
당신은 다음과 같은 것을 원합니다 :
echo -e "foo\ntouchit\nbar\nbaz" | while read line; do case $line in
touchit) touch test.txt;;
bar) echo bar found;;
esac; done
답변2
프로그램이 한 번만 시작된 경우:
nc -l 9999 |
{ awk '/^touchit$/ {matched=1;exit(0);};
END {if(matched==1) { exit(0); } else exit(1); }'
&& echo ja; }
불행히도, nc
그것은 즉시 이루어지지 않았습니다 touchit
.