Piszę skrypt w bash, aby obliczyć czas, jaki upłynął na wykonanie moich poleceń, rozważ:
STARTTIME=$(date +%s)
#command block that takes time to complete...
#........
ENDTIME=$(date +%s)
echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task..."
Wydaje mi się, że moja logika jest poprawna, ale otrzymuję następujący wydruk:
„Wykonanie tego zadania zajmuje kilka sekund…”
Coś nie tak z moją oceną ciągu?
Uważam, że zmienne basha nie mają typu, chciałbym jednak, aby w bashu istniała metoda „ciąg na liczbę całkowitą”.
Uważam, że używanie zmiennej wewnętrznej „$ SECONDS” jest bardzo przejrzyste
SECONDS=0 ; sleep 10 ; echo $SECONDS
źródło
$SECONDS
rzeczywiście działa dla / bin / bash. Nie działa dla / bin / dash, domyślnej powłoki w Debianie i Ubuntu.sleep 0.5
w powyższym, wynik czasami wynosi 0, czasami 1 (przynajmniej przez Bash 5.0.3).Próbujesz wykonać numer w
ENDTIME
poleceniu. Powinieneś również zobaczyć błąd, taki jak1370306857: command not found
. Zamiast tego użyj rozwinięcia arytmetycznego :Możesz także zapisać polecenia w osobnym skrypcie
commands.sh
i użyć polecenia time:źródło
Możesz tutaj użyć
time
słowa kluczowego Bash z odpowiednim ciągiem formatuOto, o czym mówi referencja
TIMEFORMAT
:źródło
W przypadku większych liczb możemy chcieć wydrukować w bardziej czytelnym formacie. Poniższy przykład działa tak samo jak inne, ale także drukuje w formacie „ludzkim”:
Proste testowanie:
Wynik:
Aby użyć w skrypcie, jak opisano w innych postach (przechwyć punkt początkowy, a następnie wywołaj funkcję z czasem zakończenia:
źródło
Wypróbuj następujący kod:
źródło
To jest jednowierszowa alternatywa dla funkcji Mike'a Q:
źródło
SECONDS
od Lon KAUT za odpowiedź i utrzymywanie głowy, że $ / $ {} jest niepotrzebna na zmienne obliczeniowe czyni kod tak krótko to może być używane nawet inline:echo "$((SECONDS/3600))h $(((SECONDS/60)%60))m $((SECONDS%60))s"
spróbuj użyć czasu z opcją upływających sekund:
/usr/bin/time -f%e sleep 1
pod bash.lub
\time -f%e sleep 1
w interaktywnym bashu.zobacz stronę podręcznika czasu:
i
źródło
/bin/time
nie będzie tutaj działać: OP wspomina o bloku . Więc naprawdę potrzebujemytime
tutaj słowa kluczowego .źródło
źródło