Вы можете использовать команду date
, чтобы получить текущее время до и после выполнения запланированной работы и рассчитать разницу следующим образом:
#!/bin/bash
# Get time as a UNIX timestamp (seconds elapsed since Jan 1, 1970 0:00 UTC)
T="$(date +%s)"
# Do some work here
sleep 2
T="$(($(date +%s)-T))"
echo "Time in seconds: ${T}"
printf "Pretty format: %02d:%02d:%02d:%02d\n" "$((T/86400))" "$((T/3600%24))" "$((T/60%60))" "$((T%60))""
Примечания:
$ ((...)) может использоваться для базовой арифметики в bash & ndash; Внимание: не ставьте пробелы перед минус - , так как это может быть интерпретировано как параметр командной строки.
Смотри также: http://tldp.org/LDP/abs/html/arithexp.html
EDIT:
Кроме того, вы можете взглянуть на sed , чтобы искать и извлекать подстроки из вывода, сгенерированного за time .
РЕДАКТИРОВАТЬ:
Пример для синхронизации с миллисекундами (на самом деле наносекунды, но усеченные здесь до миллисекунд). Ваша версия date
должна поддерживать формат %N
, а bash
должна поддерживать большие числа.
# UNIX timestamp concatenated with nanoseconds
T="$(date +%s%N)"
# Do some work here
sleep 2
# Time interval in nanoseconds
T="$(($(date +%s%N)-T))"
# Seconds
S="$((T/1000000000))"
# Milliseconds
M="$((T/1000000))"
echo "Time in nanoseconds: ${T}"
printf "Pretty format: %02d:%02d:%02d:%02d.%03d\n" "$((S/86400))" "$((S/3600%24))" "$((S/60%60))" "$((S%60))" "${M}"
ОТКАЗ:
Моя оригинальная версия сказала
M="$((T%1000000000/1000000))"
но это было отредактировано, потому что, по-видимому, оно не работало для некоторых людей, в то время как новая версия по сообщениям работала. Я не одобрил это, потому что я думаю, что вы должны использовать только остаток, но был лишен права голоса.
Выберите то, что вам подходит.