스크립트의 한 지점에서 다음을 수행하고 싶습니다.
start_time=date
프로세스가 실행 된 후
end_time=date
다음을 수행합니다.
elapsed=$end_time-$start_time echo "Total of $elapsed seconds elapsed for process"
어떻게해야하나요?
댓글
답변
기점 이후의 시간을 사용하여 스크립트에서 시간 범위를 쉽게 식별
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
댓글
- 이것이 제가 찾고 있었어요 .. 여기에 마이크로 타임이 포함될 수 있나요?
-
date '+%s.%N'
를 사용해보세요. - DST 및 명령의 로컬 문제를 방지하려면
date -u
로 date를 호출해야합니다. 이 답변을 읽으십시오 - (전통적으로) bc가 dc로 구현되는 방식을 보면 dc를 직접 사용할 수 있습니다.
elapsed=$(dc -e "$end_time $start_time - p")
답변
bash에는 내장 타이머 변수
start=$SECONDS # do stuff end=$SECONDS duration=$(( end - start )) echo "stuff took $duration seconds to complete"
댓글
- 또는
SECONDS=0; ...; echo "$SECONDS"
하지만 그 버그 에주의하세요.
답변
@jasonwryan은 이미 제안했지만 스크립트 시간을 정하고 싶을 때도 사용하기 때문에 답변으로 던지겠습니다. 시간을 지정하려면 myscript 를 사용하면됩니다.
time myscript
댓글
- 수시로 시도하지만 필요할 때 더 많이 사용합니다. 내 스크립트의 분리 또는 시간 하위 섹션 ..
- 스크립트 자체 내에서 파생 된 경과 시간을 사용하려는 경우 (예 : 스크립트가 초당 처리 할 수있는 단위 수를 계산하려는 경우) 유용하지 않습니다. .
답변
솔루션. 그러나 @Miata에는 .%N
가 포함되어 있지만 date
를 실행하는 데 드는 비용이있을 때 나노초를 보면 어떤 이점이 있는지 잘 모르겠습니다. 하위 셸에서 명령. 따라서 실제로는 date +%s
이면 충분합니다. 주목해야 할 다른 사항은 date +%s
epoch는 1970-01-01 00:00:00 UTC입니다. 즉, 시간이 절대적인 시대를 가지며 다른 셸 스크립트 인스턴스 또는 다른 컴퓨터간에 시간 측정 값을 공유 할 수 있습니다.
(( start=$(date +%s) )) # 1604026743 # ... some activity that lasts for, say, 24 seconds (( end=$(date -u +%s) )) # 1604026767 (( duration=end-start )) # 24
@glenn jackman이 좋아요 ” s 대답은 SECONDS
bash 내장 변수를 참조하기 때문입니다. 여기서 주목해야 할 것은 epoch는 프로세스가 시작된 시간입니다. 따라서이 기술을 사용하여 해당 스크립트 내에서 발생하는 일에 대한 시간 측정 :
(( start=SECONDS )) # 10 # ... some activity that lasts for, say, 24 seconds (( end=SECONDS )) # 34 (( duration=end-start )) # 24
또 다른 점은 (( ))
명령입니다. 즉, 다시 작성할 수 있습니다.
cmd=$(( some_expression ))
as
(( cmd=some_expression ))
, $
기호의 발생을 최소화 할 수 있습니다.
/usr/bin/time your_script
…