스크립트의 실행 시간을 효과적으로 얻는 방법? ## echo the date at

스크립트 완료 시간을 표시하고 싶습니다.

내가 현재하는 일은-

#!/bin/bash
date  ## echo the date at start
# the script contents
date  ## echo the date at end

이것은 단지 스크립트의 시작과 끝 시간을 보여줍니다. 프로세서 시간 / IO 시간 등과 같이 미세한 출력을 표시 할 수 있습니까?



답변

time스크립트를 호출 할 때 사용 하십시오.

time yourscript.sh

답변

time옵션이 아닌 경우

start=`date +%s`
stuff
end=`date +%s`

runtime=$((end-start))

답변

그냥 전화 times스크립트를 끝낼 때 인수없이.

ksh또는 zsh, 당신은 또한 사용할 수 있습니다 time대신. 로 zsh, time또한뿐만 아니라 당신에게 벽 시계 시간을 줄 것이다 사용자시스템 CPU 시간.

스크립트의 종료 상태를 유지하려면 다음을 수행하십시오.

ret=$?; times; exit "$ret"

또는 트랩을 추가 할 수도 있습니다 EXIT.

trap times EXIT

이렇게하면 쉘이 종료 될 때마다 시간이 호출되고 종료 상태가 유지됩니다.

$ bash -c 'trap times EXIT; : {1..1000000}'
0m0.932s 0m0.028s
0m0.000s 0m0.000s
$ zsh -c 'trap time EXIT; : {1..1000000}'
shell  0.67s user 0.01s system 100% cpu 0.677 total
children  0.00s user 0.00s system 0% cpu 0.677 total

또한의 모든주의 bash, ksh그리고 zsh$SECONDS자동으로 매초마다 증가됩니다 특별한 변수. 모두에서 zsh하고 ksh93, 그 변수는 부동 소수점 (과를 만들 수 있습니다 typeset -F SECONDS더 정밀도를 얻기 위해). 이것은 CPU 시간이 아닌 벽시계 시간입니다.


답변

나는 밴드 왜건에 약간 늦었지만 다른 사람들이 검색을 통해이 스레드를 우연히 발견 할 수 있도록 내 솔루션 (1 초 미만의 정확도)을 게시하고 싶었습니다. 출력은 일, 시간, 분 및 마지막으로 초 형식입니다.

res1=$(date +%s.%N)

# do stuff in here

res2=$(date +%s.%N)
dt=$(echo "$res2 - $res1" | bc)
dd=$(echo "$dt/86400" | bc)
dt2=$(echo "$dt-86400*$dd" | bc)
dh=$(echo "$dt2/3600" | bc)
dt3=$(echo "$dt2-3600*$dh" | bc)
dm=$(echo "$dt3/60" | bc)
ds=$(echo "$dt3-60*$dm" | bc)

printf "Total runtime: %d:%02d:%02d:%02.4f\n" $dd $dh $dm $ds

누군가가 이것이 유용하다는 것을 알기를 바랍니다!


답변

내 방법 bash:

# Reset BASH time counter
SECONDS=0
    # 
    # do stuff
    # 
ELAPSED="Elapsed: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec"

답변

#!/bin/bash
start=$(date +%s.%N)

# HERE BE CODE

end=$(date +%s.%N)    
runtime=$(python -c "print(${end} - ${start})")

echo "Runtime was $runtime"

예, 이것은 Python을 호출하지만 그와 함께 살 수 있다면 이것은 아주 훌륭하고 간결한 솔루션입니다.


답변

이 질문은 꽤 오래되었지만 내가 좋아하는 방법을 찾으려고 노력 하면서이 스레드가 높아졌습니다 … 그리고 아무도 그것을 언급하지 않은 것에 놀랐습니다.

perf stat -r 10 -B sleep 1

‘perf’는 커널의 ‘tools / perf’에 포함 된 성능 분석 도구이며 별도의 패키지 (CentOS의 ‘perf’및 Debian / Ubuntu의 ‘linux-tools’)로 설치하는 경우가 종종 있습니다. Linux Kernal perf Wiki 에는 이에 대한 자세한 정보가 있습니다.

‘perf stat’를 실행하면 마지막에 평균 실행 시간을 포함하여 상당히 많은 세부 정보가 제공됩니다.

1.002248382 seconds time elapsed                   ( +-  0.01% )