netcat 파이프가 너무 일찍 실행됩니까?

netcat 파이프가 너무 일찍 실행됩니까?

백그라운드에서 다음 스크립트가 실행 중입니다.

while true; do
    { file=$(/somescript); echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat $file; } | nc -l -p 20000
done

/somescript포트 20000에 대한 요청이 이루어지기 전에 즉시 한 번 실행된 다음 기다리고 올바르게 응답한다는 점을 제외하면 잘 작동합니다 .

내가 도대체 ​​뭘 잘못하고있는 겁니까? /somescript요청이 있을 때만 실행되도록 되어 있습니다 . 20000

답변1

참고: 이 질문을 작성한 후 질문이 편집되었습니다(파이프라인이 반전됨). 시간이 나면 업데이트하겠습니다.

파이프라인의 각 부분은 다른 부분과 동시에 시작됩니다. 파이프라인을 동기화하는 유일한 것은 I/O입니다. 즉, 파이프라인의 다른 프로세스가 출력을 읽거나 입력을 제공하기를 기다리는 프로세스입니다.

스크립트 는 파일 이름을 출력하기 전에 요청에 대한 somescript입력을 기다리고 관찰해야 합니다 .nc

스크립트가 무엇을 하는지 모르기 때문에 구문 분석에 몇 가지 문제가 있을 수 있다고 추측할 수 있습니다.

관련 정보