Возврат в главное меню после вызова другого скрипта

Самый простой и чистый вариант — использоватьdate:

date -ud "@$elapsed" "+Elapsed Time: %T"

Здесь $elapsedпредставляет дельту времени в секундах.

Вы можете избежать разветвления внешнего dateпроцесса, придерживаясь встроенных -модулей оболочки [1][2]. Команда оболочки printfимеет спецификатор формата даты/времени %(...)T, который часто упускают из виду :

.

TZ=UTC0 printf "Elapsed Time: %(%T)T\n" $elapsed

TZ=UTC0и date -uустанавливают часовой пояс на UTC, что предотвращает любую двусмысленность, связанную с часовым поясом и летним временем.

Поскольку в этом вопросе особое внимание уделяется форматированию, эти методы намного удобнее и гораздо менее подвержены ошибкам, -чем вычисление частей даты, потому что у вас есть весь диапазон dateпараметров формата, доступных вам -без математики. Они хорошо работают для интервалов до 24 часов и, кроме точности до -секунды, должны работать и в Bash v4.2+.

Пример:

Предположим, вы также хотите добавить наносекунды:

$ start=$SECONDS
$ #wait or run process
$ date -ud "@$((SECONDS-start))" "+Elapsed Time: %H:%M:%S.%N"
Elapsed Time: 00:00:12.003247901

$ #Or, preferably
$ TZ=UTC0 printf "Elapsed Time: %(%H:%M:%S.%N)T\n" $((SECONDS-start))
Elapsed Time: 00:00:12.005056068

Бонус

Вы можете абстрагировать свое измерение времени с помощью псевдонимов, чтобы упростить задачу. Например, мы можем эмулировать команду Oracle TIMING следующим образом:

alias timingstart='start=$SECONDS'
alias timingstop='TZ=UTC0 printf "Elapsed Time: %(%T)T\n" $((SECONDS-start))' 

Итак, теперь:

$ timingstart
$ sleep 2
$ timingstop
Elapsed Time: 00:00:02

[1] Информацию о переменной $SECONDSсм. в man ksh | less +/SECONDS
. [2] Информацию о форматах времени printfсм. в man ksh | less +/date-format -j.9

.

0
10.08.2021, 20:04
0 ответов

Теги

Похожие вопросы