Bash에서 경과 시간 가져오기

Bash에서 경과 시간 가져오기

내 스크립트의 어느 시점에서 다음을 수행하고 싶습니다.

start_time=date

하나 이상의 프로세스가 실행된 후:

end_time=date

그런 다음 다음을 수행하십시오.

elapsed=$end_time-$start_time
echo "Total of $elapsed seconds elapsed for process"

어떻게 해야 합니까?

답변1

에포크 이후의 시간을 사용하여 스크립트에서 기간을 쉽게 식별

man date
%s     seconds since 1970-01-01 00:00:00 UTC
%N     nanoseconds (000000000..999999999)

.

start_time="$(date -u +%s)"
sleep 5
end_time="$(date -u +%s)"

elapsed="$(($end_time-$start_time))"
echo "Total of $elapsed seconds elapsed for process"

 Total of 5 seconds elapsed for process

Bash는 부동 소수점 숫자를 지원하지 않으므로 시간을 비교하려면 bc와 같은 외부 도구를 사용해야 합니다.1475705058.042270582-1475705053.040524971

start_time="$(date -u +%s.%N)"
sleep 5
end_time="$(date -u +%s.%N)"

elapsed="$(bc <<<"$end_time-$start_time")"
echo "Total of $elapsed seconds elapsed for process"

 Total of 5.001884264 seconds elapsed for process

답변2

배쉬에는내장 타이머 변수

start=$SECONDS
# do stuff
end=$SECONDS
duration=$(( end - start ))
echo "stuff took $duration seconds to complete"

답변3

@jasonwryan이 이미 제안했지만 스크립트 시간을 정하고 싶을 때 사용하는 항목이기도 하므로 답변으로 남겨두겠습니다. 때가됐다스크립트그냥 사용:

time myscript

답변4

시간이 오래 걸릴 수 있는 것을 측정할 때 몇 초 만에 답을 읽는 것은 매우 짜증나는 일입니다. hh:mm:ss계산을 왜곡하지 않고 정답 형식(예: )을 얻고 싶습니다 . date다음과 같이 자신의 기능을 사용하십시오 .

# Using differences, and give result in hh:mm:ss
S=0; E=121; TT=$((E-S)); date -u -d "@${TT}" +%T
# 00:02:01

# Using date differences, and give result in hh:mm:ss
S=$(date -u +"%s"); E=$((S+121)); TT=$((E-S)); date -u -d "@${TT}" +%T
# 00:02:01

관련 정보