Bash: "또는 60초마다" 줄을 읽습니다.

Bash: "또는 60초마다" 줄을 읽습니다.

다음 예에서 "또는 60초마다"를 어떻게 구현합니까?

prints_output_in_random_intervals | \
while read line "or every 60s"
do
  do_something
done

답변1

내장된 bash 문서에는 help read다음이 언급되어 있습니다.

-t timeout  time out and return failure if a complete line of input is
            not read withint TIMEOUT seconds.  The value of the TMOUT
            variable is the default timeout.  TIMEOUT may be a
            fractional number.  If TIMEOUT is 0, read returns success only
            if input is available on the specified file descriptor.  The
            exit status is greater than 128 if the timeout is exceeded

제한 시간에 도달하여 반환되면 실패 하므로 read이 상황에서도 루프가 종료됩니다. 이를 방지하려면 read다음과 같이 종료 상태를 무시하면 됩니다.

while read -t 60 line || true; do
    ...
done

또는

while true; do
    read -t 60 line
    ...
done

관련 정보