/usr/bin/time - формат выходного времени в миллисекундах

Я использую программу /usr/bin/time для измерения времени выполнения команды. с параметром --format я могу отформатировать вывод. например

/usr/bin/time -f "%e" ls

Есть ли способ вывести большую точность истекших секунд? или просто вывод миллисекунд, а не секунд?

В руководстве /usr/bin/time говорится только о секундах, но, возможно, есть способ, и кто-то может мне помочь... спасибо!

РЕДАКТИРОВАТЬ: я знаю о команде bash "время", которая использует формат переменной среды "TIMEFORMAT". извините, но я не хочу менять это env-var... мне кажется рискованным, решение должно быть чем-то, что вообще не меняет работающую систему:)

3 ответа

Решение

Одна из возможностей заключается в использовании date команда:

ts=$(date +%s%N) ; my_command ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds"

%N должен возвращать наносекунды, а 1 миллисекунда равна 1000000 наносекунд, следовательно, путем деления вернет время, необходимое для выполнения my_command в миллисекундах.

Обратите внимание, что %N поддерживается не во всех системах, но в большинстве из них.

Для удобства я превратил ответ devnull в скрипт (я назвал его миллисекундно).

#!/bin/bash
ts=$(date +%s%N) ; $@ ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds"

Я положил сценарий в /usr/local/bin,
Дал ему исполнить права chmod +x /usr/local/bin/millisecond-time,
Теперь я могу использовать это так: millisecond-time my_command

Ps Это был бы комментарий, если бы у меня была репутация '.

В этой ветке есть пара вещей, которые путают.

Bash имеет встроенный timeкоманда, которая поддерживает переменную среды, которая позволит вам отформатировать вывод. Для получения подробной информации об этом пробеге man bashи искать TIMEFORMAT.

Так же есть стандарт /usr/bin/timeутилита командной строки, которая поддерживает переменную среды, которая позволит вам отформатировать вывод (или вы можете использовать -fили же --formatв командной строке). Для получения подробной информации об этом пробеге man timeи искать TIME.

Если вам нужно количество секунд, которое потребовалось для запуска команды, вы можете использовать встроенную команду bash (которая поддерживает максимальную точность до трех знаков после запятой):

      bash# export TIMEFORMAT="%3lR" 
bash# time find /etc > /dev/null
0m0.015s

Или вы можете использовать утилиту командной строки (которая поддерживает максимальную точность до двух знаков после запятой):

      shell# export TIME="%E"
shell# /usr/bin/time find /opt/ > /dev/null
0:00.72

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

Другие вопросы по тегам