들어오는 전자 메일을 처리하여 자신의 업무에서 블랙 박스 응용 프로그램으로 보내는 시스템이 있습니다. 높은 수준의 스크립트는 항상 실행 inittab에 의해 관리하고이 명령으로 실제 작업을 할 수있는 아이 스크립트를 실행한다 :netcat에 연결된 스크립트에서 입력을 처리합니다.
$SCRIPT | nc -l -p $PORT
자체가 명명 된 파이프에서 읽어 스크립트를,의 구문 분석 및 처리의 비트를 않습니다 데이터를 netcat을 통해 $ PORT에 연결된 프로세스에 다시 셔플하기 전에 echo
을 호출하십시오.
내가 필요로하는 것은 내 파이프의 맨 끝에서 들어오는 데이터를 처리하는 몇 가지 방법입니다. 응용 프로그램 내에서 연결을 닫으라는 요청을하면 문자열을 보냅니다. 원하는대로 정의 할 수 있으며 스크립트를 종료 할 때까지 기다립니다. 나는 현재 상대방으로부터 들어오는 데이터를 읽는 기능을 어떻게 추가 할 수 있는지 이해하기 위해 고심하고있다. 파이프를 닫는 명령인지 확인한 다음 스크립트를 종료하십시오.
(요컨대) 내 스크립트는 다음과 같습니다:
while true ; do
email_input="`cat "$pipe"`"
if [[ $email_input =~ .*escape_queue.* ]] ; then
break;
fi
echo "`parse`"
done
나는 프로그램의 흐름을 변경해야하는 가능성 열려있어, 난 그냥이 얼마나 주위에 내 머리를 정리하고 수 없습니다 새 이메일을 처리 할 때까지 스크립트가 cat $pipe
에 블록화되어 비동기 적으로 들어오는 데이터를 읽을 수 있습니다.
명확하지 않은 경우, 나는 초보자 수준의 bash 스크립팅을 사용하고 있으며 항상 개선을위한 제안을합니다.
UPDATE 새 메시지가 FIFO에 파이프되면 나는 스크립트가 종료이 시점에서
$SCRIPT | nc -l -p $PORT > $nc_data
와 스크립트 자체
netcat_response="`cat "$nc_data"`";
if [[ "$netcat_response" =~ "exit" ]] ; then
cat /dev/null > $nc_data
break;
fi
내에서 내 스크립트 호출을 변경 한 . 즉, 스크립트가 읽을 때마다 항상 1 개의 메시지를 잃어 버리고 스크립트가 종료됩니다. 무언가가 읽을 때까지 스크립트는 여전히 cat
에서 차단됩니다. 최악의 시나리오가 필요합니다.
'email_input'에 대한 할당에서 외부 따옴표를 사용할 필요가 없으며 backticks 대신 '$()'를 사용하는 것이 좋습니다. Bash는'cat'의 일을 할 수 있습니다 :'email_input = $ (< "$ pipe")'. 또한 파일을 자르려면 :> "$ nc_data"' –
도움이됩니다. 감사합니다 – Grambot