이유

이유

나는 이것을 가지고있다:

 tail -f "${my_input}" | ql_receiver_lock_holder > "${my_named_pipe}" & disown;

하지만 이 답변을 읽은 후에는 다음과 같습니다. 첫 번째 데이터가 파이프에 기록됩니다(일관되는지 여부).

${my_named_pipe}가 ${my_input} 파일로부터 어떠한 데이터도 수신하지 못하는 것 같습니다.

이 문제를 해결하는 방법을 아는 유일한 방법은 다음과 같습니다.

tail -f "${my_input}" | ql_receiver_lock_holder | while read line; do
   echo "$line" > ${my_named_pipe};
done & disown;

이를 수행하는 다른 방법이 있습니까?

답변1

my_named_pipe처음부터 존재한다면, 즉 생성 ql_receiver_lock_holder하지 않으면 작동할 것이고, 그렇지 않으면 작동하지 않을 것입니다.

아래 예에서는 관련 없는 콘텐츠를 모두 제거했습니다. 질문이 매우 일반적이므로 답변도 매우 일반적입니다.

이것은 작동합니다:

a-process | another-process > "${my_named_pipe}"

다음은 수행되지 않습니다.

a-process | another-process-that-also-creates-the-pipe > "${my_named_pipe}"

이유

첫 번째에서는 작동을 방해하는 것이 없습니다. 질문에 연결된 질문은 표준 입력(표준 출력 아님) 리디렉션을 의미합니다. 이번에도 입력을 얻지 못합니다 process1 > a-file | process2.process2

두 번째 예에서는 파이프가 존재할 때까지 파이프를 연결할 수 없습니다. 모든 배관 작업은 프로세스가 시작되기 전에 완료되어야 합니다. 현재 파이프 연결을 만들기 위해 프로세스에 신호를 보낼 방법이 없습니다. 그리고 그 과정을 직접 수행하는 것보다 더 쉬운 일은 없습니다.

관련 정보