отримати минулий час в баш


7

Я хотів би зробити таке в один момент сценарію:

start_time=date

і це після запуску процесу або процесів:

end_time=date

а потім зробіть це:

elapsed=$end_time-$start_time
echo "Total of $elapsed seconds elapsed for process"

Як би я це зробив?


4
/usr/bin/time your_script...
Jasonwryan

Відповіді:


12

Використовуйте час з епохи, щоб легко визначити проміжок часу в сценарії

man date
%s     seconds since 1970-01-01 00:00:00 UTC
%N     nanoseconds (000000000..999999999)

.

start_time="$(date -u +%s)"
sleep 5
end_time="$(date -u +%s)"

elapsed="$(($end_time-$start_time))"
echo "Total of $elapsed seconds elapsed for process"

 Total of 5 seconds elapsed for process

Bash не підтримує числа з плаваючою комою, тому вам потрібно буде використовувати зовнішній інструмент, наприклад, bc, щоб порівняти рази 1475705058.042270582-1475705053.040524971

start_time="$(date -u +%s.%N)"
sleep 5
end_time="$(date -u +%s.%N)"

elapsed="$(bc <<<"$end_time-$start_time")"
echo "Total of $elapsed seconds elapsed for process"

 Total of 5.001884264 seconds elapsed for process

це те, що я шукав .. чи може це включати мікрочаси?
Олівер Вільямс

Спробуйтеdate '+%s.%N'
Miati

Вам слід зателефонувати з датою, date -uщоб уникнути DST та локальних проблем із командою. Будь ласка , прочитайте цю відповідь
sorontar

Бачачи, як (традиційно) bc реалізується з dc, ви можете використовувати dc безпосередньо:elapsed=$(dc -e "$end_time $start_time - p")
Andrew Beals


5

@jasonwryan вже запропонував це, але я накину це як відповідь, оскільки це також є моїм переходом, коли я хочу вчасно розробити сценарій. Для моменту сценарію просто використовуйте:

time myscript

1
Я спробую це час від часу, але це більше для того, коли мені потрібно виділити або підрозділи мого сценарію ..
Олівер Вільямс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.