Можно ли распечатать время выполнения команды оболочки со следующей комбинацией?
[email protected]:~# "command to execute" && echo "execution time"
Можно ли распечатать время выполнения команды оболочки со следующей комбинацией?
[email protected]:~# "command to execute" && echo "execution time"
Не забывайте, что существует разница между bash builtin time
(который должен быть вызван по умолчанию, когда вы делаете time command
) и /usr/bin/time
(что должно требовать, чтобы вы вызывали его по его полному пути).
Встроенный time
всегда печатает на stderr, но /usr/bin/time
позволит вам отправлять выходные данные в определенный файл, поэтому вы не будете вмешиваться в исполняемый поток stderr команды. Кроме того, формат /usr/bin/time
настраивается в командной строке или переменной среды time
, тогда как формат bash builtin time
настраивается только с помощью переменной среды TIMEFORMAT
.
$ time factor 1234567889234567891 # builtin
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 # log to file `timed`
1234567889234567891: 142662263 8653780357
$ cat timed
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+217minor)pagefaults 0swaps
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
[email protected]:~# time [command]
Он также различает используемое время и используемое системное время.
Добавление в ответ @mob:
Добавление %N
в date +%s
дает нам наносекундную точность:
start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`
Для линейного дельта-измерения попробуйте gnonom.
Это утилита командной строки, немного похожая на moreutils ts, для добавления информации о метке времени к стандартным выводам другой команды. Полезно для длительных процессов, где вам нужна историческая запись того, что занимает так много времени.
Транспонирование чего-либо в gnomon добавит временную метку к каждой строке, указывая, как долго эта строка была последней строкой в буфере - то есть, сколько времени потребовалось, чтобы появилась следующая строка. По умолчанию gnomon отображает секунды, прошедшие между каждой строкой, но это настраивается.
Если я начинаю долговременный процесс, например, копию или хеш, и я хочу узнать позже, сколько времени потребовалось, я просто делаю это:
$ date; sha1sum reallybigfile.txt; date
Это приведет к следующему выводу:
Tue Jun 2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt
Tue Jun 2 21:33:54 PDT 2015
Конечно, как это реализовано здесь, оно не очень точное и не вычисляет прошедшее время. Но это простое и иногда все, что вам нужно.
В zsh вы можете использовать
=time ...
В bash или zsh вы можете использовать
command time ...
Эти (с помощью разных механизмов) принудительно используют внешнюю команду.