bash에서 경과 시간 가져 오기

스크립트의 한 지점에서 다음을 수행하고 싶습니다.

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 )) 

, $ 기호의 발생을 최소화 할 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다