2014-04-25 7 views
0

문제가있어 온라인에서 솔루션을 찾는 데 어려움이 있습니다. 내 코드는 로그 파일을 테일링하고 파일이 기록 될 때 netcat을 사용하여 외부 서버에 연결합니다.파이프 대 쉘 스크립트 문제

다음은 제 작업 코드의 간단한 예입니다. 나중에 문제를 설명하겠습니다.

# function that watches input for '$servertag' variable 
serverwatch() { 
    while read data 
    do 
    if [ `strindex "$data" "$servertag"` -ge 0 ]; then 
     .... 
     nc <server_ip> 1234 
     .... 
    fi 
    done 
} 

# Tail the log file and pipe to functions 
tail -f messages | serverwatch 

연결이 성공적으로 설정되었지만 'messages'파일의 데이터가 netcat으로 파이프됩니다. 나는 데이터를 로컬에서 파싱하는 것을 기본으로하지만 netcat을 통해 데이터가 전송되는 것을 막을 방법을 모른다.

필자는 대부분의 DD-WRT 빌드에서이 작업을하고 싶어하므로 새 패키지를 설치하지 않으려 고합니다. 또한 bash는 내가 가지고있는 빌드에서 깨지거나 최소가되는 것처럼 보이므로 bash를 피하려고합니다.

이 문제와 관련하여 질문, 해결책 또는 다른 질문이 있으면 알려주십시오.

감사합니다,

제임스

답변

2

netcat을은 표준 입력 디스크립터를 상속합니다. 이 말의 입력에 도달 할 때

nc <server_ip> 1234 < /dev/null 

netcat을 불행하게도 연결을 닫습니다, 그래서 당신은 연결이 열린 상태를 유지하려는 경우, 당신은 -d 플래그를 사용할 수 있습니다 같은, 대신 다른 곳에서 리디렉션.

nc -d <server_ip> 1234 < /dev/null 
+0

감사합니다. 도움에 감사드립니다. 이 설치에서 netcat 패키지에 'd'플래그가 누락되어있는 것 같습니다. 'nc : invalid option --d'를 던지고있다. – James