Измерение времени в скрипте


8

Этот поток показывает, как измерить время, необходимое для запуска скрипта. В моем случае меня интересует измерение времени между двумя точками в скрипте . Вот пример того, как я хотел бы использовать это:

start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time

Я хотел бы, чтобы отображаемое время было удобочитаемым (секунды, минуты, часы, дни и т. Д.), Если это возможно. Есть идеи как это сделать?

Ответы:


7

Вы можете использовать dateутилиту:

#!/bin/bash

start_measuring_time() {
  read s1 s2 < <(date +'%s %N')
}

stop_measuring_time() {
  read e1 e2 < <(date +'%s %N')
}

show_elapsed_time() {
  echo "$((e1-s1)) seconds, $((e2-s2)) nanoseconds"
}

start_measuring_time
sleep 2
stop_measuring_time
show_elapsed_time

Это приведет к ошибкам: время начала и окончания нужно интерпретировать как секунды + наносекунды вместе , а не по отдельности - иначе вы можете получить такие вещи, как отрицательные значения.
rozcietrzewiacz

1
Смотрите мой ответ на этот вопрос, чтобы узнать, как это решить.
rozcietrzewiacz

Мне пришлось понизить голос, так как это не совсем правильный ответ, правильный, он иногда дает отрицательные значения, но в вашем вопросе, почему вы не ставите эхо до Tend-Tstart и после$(
munish

11

Вы можете просто использовать time:

time (
Line 1
Line 2
..
Line N
)

Я думаю, что вывод времени понятен человеку, как есть, но если ваш сценарий будет измерять в днях и т. Д., То проверьте man timeпараметры форматирования для вывода.


Спасибо @frabjous! Я думаю, что приму ответ @ enzotib, потому что он позволяет мне измерять время в общих потоках управления (т.е. не только в линейных потоках).
Амелио Васкес-Рейна

1

Пример попробовать timerscript.sh:

#!/bin/bash

#timing in minutes with %m
start=`date +%m`
echo 'Start:' $start
#do something e.g. wait for 1.30 minutes 
sleep 90

`end=`date +%m`
echo 'End: '$end
echo 'runtime: '$runtime
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.