Не забывайте, что существует разница между встроенной функцией bash time
(которая должна вызываться по умолчанию, когда вы это делаете time command
) и /usr/bin/time
(которая должна требовать, чтобы вы вызывали ее по полному пути).
Встроенная команда time
всегда печатает в stderr, но /usr/bin/time
позволяет отправлять вывод времени в конкретный файл, чтобы вы не мешали потоку исполняемой команды stderr. Кроме того, /usr/bin/time
формат настраивается в командной строке или с помощью переменной среды TIME
, тогда как встроенный time
формат bash настраивается только с помощью TIMEFORMAT
переменной среды.
$ time factor 1234567889234567891
1234567889234567891: 142662263 8653780357
real 0m3.194s
user 0m1.596s
sys 0m0.004s
$ /usr/bin/time factor 1234567889234567891
1234567889234567891: 142662263 8653780357
1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps
$ /usr/bin/time -o timed factor 1234567889234567891
1234567889234567891: 142662263 8653780357
$ cat timed
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+217minor)pagefaults 0swaps
man bash
: «Переменная TIMEFORMAT может быть установлена в строку формата, которая определяет, как должна отображаться информация о времени»help time
потому что я только взглянул на него и подумал, что это аргумент командной строки. Обновлю ответ.time
- это встроенная команда в большинстве оболочек, которая записывает информацию о времени выполнения на tty.Вы также можете попробовать что-то вроде
start_time=`date +%s` <command-to-execute> end_time=`date +%s` echo execution time was `expr $end_time - $start_time` s.
Или в
bash
:start_time=`date +%s` <command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s
источник
time
использует миллисекунды. И если вы хотите синхронизировать несколько команд вместе без использования переменных и вычислений, вы можете использовать круглые скобки:time ( command1 ; command2 ; command3 )
вы можете даже синхронизировать их по отдельности вместе с общим временем, например:time ( time command1 ; time command2 ; time command3 )
Конечно, если вам нужно около двадцати команд, может лучше использовать это решение ответа. Но тогда вы должны начать думать о класть ваши команды все в сценарии ...root@hostname:~# time [command]
Он также различает используемое время в реальном времени и используемое системное время.
источник
time
пишет на tty, а не на stderr. Что, я думаю, только усугубляет ситуацию.Для построчного измерения дельты попробуйте gnonom .
источник
Добавление к ответу @mob:
Добавление
%N
кdate +%s
дает нам наносекундную точность:start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`
источник
Если я запускаю длительный процесс, такой как копия или хеш, и хочу позже узнать, сколько времени это заняло, я просто делаю следующее:
В результате получится следующий результат:
Конечно, в том виде, в каком он реализован здесь, он не очень точен и не рассчитывает прошедшее время. Но это грязно просто и иногда все, что вам нужно.
источник
В zsh вы можете использовать
В bash или zsh вы можете использовать
command time ...
Они (с помощью различных механизмов) заставляют использовать внешнюю команду.
источник
Только
ps -o etime= -p "<your_process_pid>"
источник