표준 출력에 텍스트 배치를 매우 빠르게 작성하는 프로그램이 있지만 출력에는 원하는 루프를 작성할 수 있는 특정 출력이 없습니다. 내 프로그램의 표준 출력 예:
[time:here] random text 1
[time:here] random text 2
[time:here] random text 3
[time:here] random text 4
[time:here] random text 5
[time:here] random text 6
[time:here] random text 7
그런 다음 내가 상호 작용할 때까지 기다린 다음 동일한 스타일의 텍스트를 사용하여 다시 표준 출력에 씁니다.
[time:here] random text 8
[time:here] random text 9
[time:here] random text 10
[time:here] random text 11
[time:here] random text 12
[time:here] random text 13
[time:here] random text 14
stdout은 몇 밀리초처럼 매우 빠르게 인쇄된 다음 상호 작용할 때까지 기다려야 합니다. 상호 작용하자마자 stdout은 빠르게 다시 작성한 다음 기다립니다. 프로그램을 닫을 때까지 이 작업이 반복됩니다.
echo
기다리는 사이에 프로그램과 상호 작용할 때(또는 이와 유사한 것을 사용하여) 다른 파일에 쓰라는 명령을 보내고 싶습니다.
echo
"대기"를 대상으로 하고 표준 출력을 기다릴 때마다 명령을 실행할 수 있는 방법이 있습니까 ? 예를 들어 대기 시간이 5초보다 길면 명령을 실행 echo
하고 stdout이 다시 변경될 때까지 기다리시겠습니까?
답변1
시간 제한이 있는 읽기 차단을 사용하여 출력이 중지되는 시기를 결정할 수 있습니다. 예를 들어 Bash는 read
시간 초과 매개변수를 지원합니다. STDIN 출력이 2초 이상 중지되면 다음 스크립트가 한 줄을 작성합니다.
#!/bin/sh
while read -r firstline; do
while read -r -t 2 line; do
continue
done
echo "---- No data in 2 seconds ----"
done
원하는 경우 에코를 다른 로그로 리디렉션할 수 있으며 표준에서 읽은 데이터를 에코하도록 스크립트를 수정할 수 있습니다.