실제로 스크립트가 완료되는 데 걸리는 시간을 추정하고 싶을 때.
startdate=$date
stuffs
enddate=$date
나는 이 두 날짜의 차이를 알고 싶습니다. 일반적으로 스크립트는 1주일 이내에 완료됩니다. 그래서 일수와 분이 필요합니다.
답변1
bash
매뉴얼 에서 :
SECONDS
이 매개변수가 참조될 때마다 쉘이 호출된 이후의 시간(초)이 반환됩니다. 값이 에 할당된 경우
SECONDS
후속 참조에서 반환되는 값은 할당 이후의 시간(초)에 할당된 값을 더한 값입니다. 설정하지 않으면SECONDS
나중에 재설정하더라도 특수 속성이 손실됩니다.
따라서 초를 계산하는 타이머를 사용하여 코드 조각의 시간을 측정하고 싶을 때마다 다음을 수행하세요.
SECONDS=0
# code goes here
t=$SECONDS
$t
이 값의 일수와 분 수를 인쇄하려면 다음 을 수행하십시오.
printf 'Time taken: %d days, %d minutes\n' "$(( t/86400 ))" "$(( t/60 - 1440*(t/86400) ))"
답변2
또한:time bash script.sh
답변3
타임 스탬프를 사용할 수 있습니다date "+%s"
$ date "+%s"
1590502845
bash를 사용하여 $(())
계산하십시오.
START=$(date "+%s")
work ... work... work ...
END=$(date "+%s")
echo $((END-START))
답변4
hh:mm:ss
대부분의 답변에는 시간을 형식으로 얻는 쉬운 방법이 없습니다 .
간단하게 유지하고 Bash 내장 기능만 사용하겠습니다.
# Using the Bash built-in SECONDS
SECONDS=0;sleep 0; t=$((SECONDS+241));TT=$(date -u -d "@${t}" +%T); printf 'Time taken: %s\n' "$TT"
# Time taken: 00:04: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