Я проверил это , но предоставленное решение не сработало для меня.
Используя дату, я могу получить время выполнения в секундах:
T="$(date +%s)"
#some work here
T="$(($(date +%s)-T))"
echo "execution time (secs) ${T}"
Тем не менее, когда я пытаюсь это:
T="$(date +%s%N)"
#some work here
T="$(($(date +%s%N)-T))"
Добавляя% N (как указано выше) к дате, чтобы получить точность с точностью до наносекунды, я получаю следующую ошибку: -bash: 1369320760N: слишком большое значение для базы (маркер ошибки "1369320760N")
Кто-нибудь знает, как измерить время выполнения в миллисекундах с помощью bash под Mac OS X?
# some work here
опущенным, я получаю время от 0,2 до 0,3 сек - что должно быть ноль (или, по крайней мере, постоянным), чтобы достичь вашей цели. Принимая во внимание,/usr/bin/time usleep 50000
что разумное стабильное время составляет 0,05 +/- 0,01 сек. (Проверено только в Linux, не знаю, доступны ли / OSR / bin / time и / или usleep для OSX.)Ответы:
Поскольку OSX является системой BSD-ish, ее библиотека strftime не имеет
%N
( http://www.freebsd.org/cgi/man.cgi?query=date )time
Предоставляет ли встроенная команда bash необходимую вам информацию?источник
Я бы пошел по этому пути, если бы мне понадобились миллисекунды, а BSD не поддерживал дату
+%s%N
источник
echo $(($(date +%s%N)/1000000))
Это преобразовало бы из нано-секунд в миллисекунды.С @mpy
date +%s.%N
работает.Вывод отличается между Linux и OS X, хотя:
Linux:
1369322592.573787111
OS X:
1369322610.N
источник
date +%s.%N
(но я не могу проверить OSX; он работает на Linux). Но проблема то в том, чтоbash
«s$(( ))
ИМХО не в состоянии справиться с числами с плавающей точкой.Если вы устанавливаете,
coreutils
вы можете использовать GNU Linuxdate
, написавgdate
.Coreutils доступен с Homebrew:
brew install coreutils
.источник
Как уже упоминалось в другом ответе, дата OS X не поддерживает% N (наносекунды).
Не могли бы вы просто сохранить команды во времени в виде сценария? Или используйте для них подоболочку или группу команд:
Или сложите время отдельных команд:
Или используйте некоторый язык сценариев:
%.3f
является спецификатором формата для числа с плавающей запятой с 3 десятичными знаками. Time.now - это метод класса класса Time.источник
ruby -e 'puts "%.3f" % Time.now'
,ruby
вызывает интерпретатор ruby,-e
выполняет сценарий, который следует в командной строке.puts
является ruby'sprintf
(своего рода),Time
является объектом ruby иTime.now
секундами с начала эпохи. Использование%.3f
обрезает вывод до 3 десятичных разрядов, что составляет миллисекунды (части «.046» и «.943» вывода.)time
это инструмент командной строки, который определяет время выполнения следующей команды. Смотритеman time
для более подробной информации.Гленн прав,
time
это команда, которую вы ищете, но для того, чтобы разобрать информацию, которую вы хотите, вам нужно будет передать ее другому процессору, напримерsed
.time command-goes-here >/dev/null 2>$1|sed rules-go-here
Эта команда избавит от выходных данных самой команды (отправив как стандартные, так и ошибочные выходные данные в / dev / null) и передаст результаты времени в sed, где вам нужно будет выбрать соответствующие правила для редактирования потока, и вывести желаемое значение.
источник