Bash에서 타이머를 사용하는 방법은 무엇입니까?

Bash에서 타이머를 사용하는 방법은 무엇입니까?

스크립트 시작 부분에서 시작하고 끝 부분에서 멈추는 타이머가 필요합니다.

답변1

지속 시간을 초 단위로 원하면 상단에서 사용하십시오.

start=$SECONDS

마침내

duration=$(( SECONDS - start ))

답변2

Linux에 내장된 time명령을 사용할 수 있습니다. 매뉴얼 페이지에서:

시간 명령 [매개변수]

시간은 FORMAT 문자열에서 COMMAND가 사용하는 리소스에 대해 표시되는 정보를 결정합니다. 명령줄에 형식이 지정되지 않았지만 TIME 환경 변수가 설정된 경우 해당 값이 형식으로 사용됩니다.

스크립트 시간을 측정하려면 다음을 cleanup.sh사용하세요.

$ time cleanup.sh

답변3

나는 이것이 오래된 질문이라는 것을 알고 있지만 실행하는 데 시간이 얼마나 걸리는지 알고 싶거나 알고 싶을 때 모든 작업을 수행하는 방법입니다.

Bash에는 내부 변수라는 이름의 두 번째 타이머가 내장되어 있습니다 SECONDS(참조:여기다른 내부 변수의 경우)

SECONDS=0실행 시간을 확인하고 싶은 것 보다 먼저 . 좋은 결과를 얻으려면 사용자 입력 뒤에 와야 하므로 정보를 요청하는 경우 프롬프트 뒤에 입력하세요.

그런 다음 확인하려는 내용의 끝에 다음을 입력하세요.

if (( $SECONDS > 3600 )) ; then
    let "hours=SECONDS/3600"
    let "minutes=(SECONDS%3600)/60"
    let "seconds=(SECONDS%3600)%60"
    echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)" 
elif (( $SECONDS > 60 )) ; then
    let "minutes=(SECONDS%3600)/60"
    let "seconds=(SECONDS%3600)%60"
    echo "Completed in $minutes minute(s) and $seconds second(s)"
else
    echo "Completed in $SECONDS seconds"
fi

시간을 초 단위로 알고 싶다면 위의 내용을 다음과 같이 단순화할 수 있습니다.

echo "Completed in $SECONDS seconds"

예를 들어:

read -rp "What's your name? " "name"
SECONDS=0
echo "Hello, $name"
if (( $SECONDS > 3600 )) ; then
    let "hours=SECONDS/3600"
    let "minutes=(SECONDS%3600)/60"
    let "seconds=(SECONDS%3600)%60"
    echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)" 
elif (( $SECONDS > 60 )) ; then
    let "minutes=(SECONDS%3600)/60"
    let "seconds=(SECONDS%3600)%60"
    echo "Completed in $minutes minute(s) and $seconds second(s)"
else
    echo "Completed in $SECONDS seconds"
fi

답변4

$SECONDS@anask는 이 답변에 대해 영리한 솔루션을 제공했습니다. 단, 새 답변을 만드는 대신 네이티브를 사용하는 것이 좋습니다.

awk -v t=$SECONDS 'BEGIN{t=int(t*1000); printf "Elapsed Time (HH:MM:SS): %d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'

및 나누기의 목적은 printf경과된 초를 각각 해당 단위인 시, 분, 초로 변환하는 것입니다.

관련 정보