타임랩스 기능 구축 [닫기]

타임랩스 기능 구축 [닫기]

매초 시간을 인쇄하는 스크립트에 시간 경과 함수를 작성하고 싶습니다. 예를 들어 출력은 다음과 같아야 합니다.

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

관련 정보