스크립트의 맨 처음부터 끝까지 멈출 타이머가 필요했습니다.
댓글
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 
댓글
-  알아보기 사용중인 
timehackernoon.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사용