/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
Как упоминалось выше, ни одна из этих переменных не используется ничем другим, и их изменение безопасно.