매초 시간을 인쇄하는 스크립트에 시간 경과 함수를 작성하고 싶습니다. 예를 들어 출력은 다음과 같아야 합니다.
finding files inside a directory
time elapse HH:MM:SS
- HH는 시간이다
- MM은 분입니다.
- SS 세컨드
그리고 스크립트 실행이 완료된 후 라인 시간이 경과하고 함수는 새 라인을 인쇄하지 않고 1초 동안 화면에서 카운트를 중지합니다.
답변1
나는 내가 게시한 것과 같은 스톱워치 기능을 작성하겠습니다.여기, 호출하면 실행 중인 명령의 프로세스 ID를 모니터링하도록 지시합니다(이것은 GNU 로 가정합니다 date
).
#!/bin/bash
stopwatch(){
date1=`date +%s`;
while kill -0 $1 2>/dev/null; do
printf "Elapsed time: %s\r" "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)";
sleep 0.1
done
}
find /path/to/dir > output 2> error &
stopwatch $!
Ctrl이 접근 방식은 + 를 사용하여 스크립트를 종료하면 프로세스가 백그라운드에서 계속 실행된다는 것을 의미 C합니다 find
.스테판의 솔루션더 나은 생각입니다.
답변2
bash
셸을 사용하면 다음을 수행할 수 있습니다.
elapse() (
SECONDS=0
while read -t1; (($? > 128)); do
TZ=UTC0 printf >&2 '\rtime elapse %(%T)T' "$SECONDS"
done
echo >&2
)
{ long-running-command 4>&1 >&3 3>&- | elapse; } 3>&1