
한동안 stdout에서 데이터를 생성한 다음 계속 실행되지만 더 이상 데이터를 출력하지 않는 소프트웨어가 있습니다.
해당 출력을 가져와 추가로 처리하여 출력을 파일에 저장하는 파이프라인이 있습니다. 하지만 원래 프로세스는 출력 생성이 완료된 후에도 계속 실행되기 때문에 이를 수동으로 종료해야 합니다. 몇 초 동안 출력이 생성되지 않으면 실행 중인 프로그램을 종료하는 명령이 있습니까?
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_data
2초 동안 아무 것도 출력하지 않으면 파이프라인을 종료하고 싶습니다 .
답변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