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