Просто используйтеtime [any command]
. Пример:time sleep 1
будет спать в режиме реального времени (, т.е. :по секундомеру )из ~от 1,000 до ~1,020 с, как показано здесь:
$ time sleep 1
real 0m1.011s
user 0m0.004s
sys 0m0.000s
Какая красота. Вы можете поместить любую команду после нее, и она выведет результат в удобном для человека -читаемом виде. Мне очень нравится использовать его для временных сборок. Экс:
# time your "make" build
time make
# time your "Bazel" build
time bazel build //path/to/some:target
...или для операций git, которые потенциально могут быть очень длинными,так что я могу развить реалистичные ментальные ожидания:
# time how long it takes to pull from a massive repo when
# I'm working from home during COVID-19. NB: `git pull`
# is sooooo much slower than just pulling the one branch
# you need with `git pull origin `, so just fetch
# or pull what you need!
time git pull origin master
Для более -настраиваемых временных требований , когда вам может потребоваться манипулировать выводом или преобразовывать его в другие формы, в bash используйте внутреннюю $SECONDS
переменную. Вот демонстрация, включающая преобразование этих секунд в другие единицы, такие как минуты с плавающей запятой:
Обратите внимание, что dt_min
округляется от0.01666666666...
(1 секунда = столько минут )до 0.017
в данном случае, так как я использую для округления функцию printf
. В приведенной ниже части sleep 1;
вы бы вызвали свой скрипт для запуска и времени, но вместо этого я просто сплю в течение 1 секунды ради этой демонстрации.
Команда:
start=$SECONDS; sleep 1; end=$SECONDS; dt_sec=$(( end - start )); \
dt_min=$(printf %.3f $(echo "$dt_sec/60" | bc -l)); \
echo "dt_sec = $dt_sec; dt_min = $dt_min"
Выход:
dt_sec = 1; dt_min = 0.017
bc
и printf
читайте в моем ответе здесь:https://stackoverflow.com/questions/12722095/how-do-i-use-floating-point-division-in-bash/58479867#58479867time
, но, возможно, это было из ответа @ Trudbert прямо здесь .