내 스크립트의 어느 시점에서 다음을 수행하고 싶습니다.
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