스크립트의 맨 처음부터 끝까지 멈출 타이머가 필요했습니다.
댓글
Answer
초 단위의 시간을 원하면 상단에서
start=$SECONDS
그리고 마지막
duration=$(( SECONDS - start ))
댓글
- 초 이상 걸리면 어떻게 되나요?
- @Pithikos Philip Gibbons '의 답변 아래
답변
Linux의 기본 제공 time
명령을 사용할 수 있습니다. man 페이지에서 :
time COMMAND [arguments]
time은 표시 할 정보를 결정합니다. ay 문자열 FORMAT에서 COMMAND가 사용하는 리소스에 대해 설명합니다. 명령 줄에 형식이 지정되지 않았지만 TIME 환경 변수가 설정된 경우 해당 값이 형식으로 사용됩니다.
cleanup.sh
스크립트, 사용 :
$ time cleanup.sh
댓글
- 알아보기 사용중인
time
hackernoon.com/ …
답변
이것은 꽤 오래된 질문이라는 것을 알고 있지만 실행하는 데 걸리는 시간을 알고 싶거나 알고 싶을 때 작업을 수행하는 방법입니다.
Bash에는 SECONDS
라는 내부 변수 형식의 내장 초 타이머가 있습니다 (참조 : 여기 다른 내부 변수의 경우)
실행 시간을 확인하는 항목 앞에 SECONDS=0
를 입력합니다. 좋은 결과를 얻으려면 사용자 입력 후 여야합니다. “정보를 요청하는 경우 프롬프트 뒤에 입력하십시오.
그런 다음 확인중인 항목의 끝에 다음을 입력하십시오.
if (( $SECONDS > 3600 )) ; then let "hours=SECONDS/3600" let "minutes=(SECONDS%3600)/60" let "seconds=(SECONDS%3600)%60" echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)" elif (( $SECONDS > 60 )) ; then let "minutes=(SECONDS%3600)/60" let "seconds=(SECONDS%3600)%60" echo "Completed in $minutes minute(s) and $seconds second(s)" else echo "Completed in $SECONDS seconds" fi
시간 (초) 만 알고 싶다면 위의 내용을 다음과 같이 단순화 할 수 있습니다.
echo "Completed in $SECONDS seconds"
예 :
read -rp "What"s your name? " "name" SECONDS=0 echo "Hello, $name" if (( $SECONDS > 3600 )) ; then let "hours=SECONDS/3600" let "minutes=(SECONDS%3600)/60" let "seconds=(SECONDS%3600)%60" echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)" elif (( $SECONDS > 60 )) ; then let "minutes=(SECONDS%3600)/60" let "seconds=(SECONDS%3600)%60" echo "Completed in $minutes minute(s) and $seconds second(s)" else echo "Completed in $SECONDS seconds" fi
댓글
- 금지 자들을위한 단축키 이렇게 정교한 시간 형식을 원하지 않습니다.
date +%T -d "1/1 + $SECONDS sec"
(24 시간 미만으로 제한되지만 요일 추가에도 적용 가능) - TLDP '의 내부 변수 에 대한 훌륭한 링크. 감사합니다!
답변
#!/bin/bash start=$(date +%s) # # do something sleep 10 # # end=$(date +%s) seconds=$(echo "$end - $start" | bc) echo $seconds" sec" echo "Formatted:" awk -v t=$seconds "BEGIN{t=int(t*1000); printf "%d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}"
댓글
- 안녕하세요. Unix SE에 오신 것을 환영합니다! 코드 전용 답변은 ' 잘 보이지 않습니다. 스크립트가 수행하는 작업을 설명 할 수 있습니다.
- 여기서 1000을 곱한 다음 다음으로 나누는 이유는 무엇입니까? 표시되는 모든 값에 대해 나중에 1000 * 수정자가 있습니까?
Answer
@anask는 이에 대한 현명한 해결책을 제시합니다. 답변, 새 것을 만드는 대신 기본 $SECONDS
를 사용하는 것이 좋습니다.
awk -v t=$SECONDS "BEGIN{t=int(t*1000); printf "Elapsed Time (HH:MM:SS): %d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}"
printf
및 분할은 경과 된 초를 해당 단위 인 Hours, Mins, Secs로 각각 변환하는 것입니다.
Answer
최근 비슷한 시도를했습니다. 다음을 제안합니다.
date1=$(date +%s) #Use this arithmetic to determine elapsed time since defining date1 $(( $(date +%s) - $date1 )) #While loop using timer while ! [ $(( $(date +%s) - $date1 )) -gt 10 ]; do #Terminal timer -n won"t append new line, so the echo will replace itself. ##There is also some date formatting to achieve: HH:MM:SS. echo -ne "$(date -u --date @$(( $(date +%s) - $date1 )) +%H:%M:%S)\r" done
time
명령 (time ./script.sh)을 사용하고 현재 시간을 인쇄하려면date
명령을 사용하십시오.time yourprogram.sh
사용