n초 동안 데이터 흐름이 없으면 파이프라인 종료

n초 동안 데이터 흐름이 없으면 파이프라인 종료

잠시 동안 표준 출력에 데이터를 생성한 다음 계속 실행되지만 더 이상 데이터를 출력하지 않는 소프트웨어가 있습니다.

해당 출력을 가져와 추가로 처리하여 출력을 파일에 저장하는 파이프라인이 있습니다. 그러나 원래 프로세스는 출력 생성이 완료된 후에도 계속 실행되므로 수동으로 종료해야 합니다. 몇 초 동안 아무런 출력도 생성하지 않으면 실행 중인 프로그램을 종료하는 명령이 있습니까?

timeout 명령에 대해 알고 있지만 고정된 시간 초과로 실행되는 것 같습니다. 소프트웨어가 얼마나 오랫동안 출력을 계속할지 결정할 수 있는 확실한 방법이 없습니다.

예:

generate-data내 콘텐츠가 다음과 같으며 수정할 수 없다고 가정해 보겠습니다 . 사실 이것은 수정하고 싶지 않은 컴파일된 소프트웨어입니다.

#! /usr/bin/env bash

for x in {1..5}; do
    echo $x
    sleep 1
done

while true; do sleep 1; done

나는 현재 비슷한 것을 실행 중이며 ./generate_data | grep '[2-4]' > output원하는 출력을 생성하지만 결코 종료되지 않습니다.

파이프를 한 번 종료하고 generate_data2초 동안 아무 것도 출력하지 않으려고 합니다.

답변1

읽기 명령을 사용하십시오. -t 스위치는 당신의 친구입니다. 이와 유사

(echo "we:re:e";sleep 2;echo "d:dd:d") | while read -d ":" -t 2 a;do echo $a;done

산출:

 we
 re
(echo "we:re:e";sleep 1;echo "d:dd:d") | while read -d ":" -t 2 a;do echo $a;done

산출:

we
re
e d
dd

관련 정보