Время выполнения печати команды оболочки

Можно ли распечатать время выполнения команды оболочки со следующей комбинацией?

[email protected]:~# "command to execute" && echo "execution time"

Ответ 1

Не забывайте, что существует разница между 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

Ответ 2

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

Ответ 3

[email protected]:~# time [command]

Он также различает используемое время и используемое системное время.

Ответ 4

Добавление в ответ @mob:

Добавление %N в date +%s дает нам наносекундную точность:

start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`

Ответ 5

Для линейного дельта-измерения попробуйте gnonom.

Это утилита командной строки, немного похожая на moreutils ts, для добавления информации о метке времени к стандартным выводам другой команды. Полезно для длительных процессов, где вам нужна историческая запись того, что занимает так много времени.

Транспонирование чего-либо в gnomon добавит временную метку к каждой строке, указывая, как долго эта строка была последней строкой в ​​буфере - то есть, сколько времени потребовалось, чтобы появилась следующая строка. По умолчанию gnomon отображает секунды, прошедшие между каждой строкой, но это настраивается.

gnomon demo

Ответ 6

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

$ date; sha1sum reallybigfile.txt; date

Это приведет к следующему выводу:

Tue Jun  2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0  reallybigfile.txt
Tue Jun  2 21:33:54 PDT 2015

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

Ответ 7

В zsh вы можете использовать

=time ...

В bash или zsh вы можете использовать

command time ...

Эти (с помощью разных механизмов) принудительно используют внешнюю команду.