"read"를 사용하여 fifo에서 읽을 때 시간 초과가 발생하지 않습니다.

"read"를 사용하여 fifo에서 읽을 때 시간 초과가 발생하지 않습니다.

이 코드를 보세요:

while read -t 3 line; do
    echo ${line}
done < /opt/data.log

data.log선입선출 방식입니다. 프로세스가 여기에 쓰고 있으며 코드는 이를 읽어 사용자에게 표시해야 합니다. 하지만 3초 이내에 fifo에 더 이상 데이터가 없으면 종료하고 싶습니다.

문제는 결코 시간이 초과되지 않는다는 것입니다. 나는 이 fifo에 글을 쓰고 다음과 같은 내용을 보여줍니다.

read: 6: Illegal option -t 

뭐가 문제 야?

[고쳐 쓰다]

예, 저는 /bin/sh심볼릭 링크인 shebang을 사용하고 있습니다 dash. 으로 바꿨 /bin/bash는데 소용이 없었습니다. 아무도 fifo를 열지 않으면 영원히 기다립니다. FIFO의 다른 쪽 끝이 열리지 않을 때 작동하는 시간 초과 솔루션을 원합니다.

답변1

배쉬를 사용하고 있나요? 또는 다른 것? read -tkshism입니다(bash와 zsh도 지원하지만 표준은 아닙니다).

bash에서는 작동하지만 대시에서는 작동하지 않습니다.

$ bash -c 'echo foo | bash는 동시에 -t 3 xxxx를 읽습니다.'
부자
$ dash -c 'echo foo | 또한 읽기 -t 3 xxxx;
대시: 1: 읽기: 잘못된 옵션 -t

답변2

나는 이것을 수행하는 좋은 방법을 찾았습니다.

exec 5<>/opt/data.log

while read -7 3 line <& 5; do
    echo ${line}
done

스크립트가 영원히 차단되지 않도록 읽기 및 쓰기용으로 엽니다. 설명은 다음과 같습니다. https://stackoverflow.com/a/4875924/654269

관련 정보