Проверьте этот комментарий для возможного ответа.
Я видел ту же ошибку с Z400 от HPE (compaq ). Это сообщение об ошибке, вероятно, связано с тем, что диск выглядит как раздел, отформатированный *nix, но он не загружается из-за какой-то проблемы с содержимым диска. Когда возникает эта проблема, BIOS выдает это двусмысленное предупреждение.
Сzsh
:
zmodload zsh/datetime
TIMEFMT='Total duration for %J: %*E'
preexec() strftime 'Start Time: %d/%m/%y %I:%M%P'
precmd() strftime 'End Time: %d/%m/%y %I:%M%P'
REPORTTIME=0
Затем вы получите время начала, напечатанное при вводе командной строки, время окончания, напечатанное непосредственно перед отображением следующего приглашения, и продолжительность каждой не -встроенной команды (, точнее, для каждой процесс, ожидаемый оболочкой):
$ sleep 1; sleep 2
Start Time: 02/01/21 08:31am
Total duration for sleep 1: 1.002
Total duration for sleep 2: 2.003
End Time: 02/01/21 08:31am
Вы можете изменить REPORTTIME=0
на REPORTTIME=10
, например, чтобы сообщать только время команд, которые занимают более 10 секунд процессорного времени (, а не истекшее время ), или префикс каждого команду, которую вы хотите синхронизировать с time
.
Как скрипт, который запускает произвольную команду:
#! /bin/zsh -
zmodload zsh/datetime
TIMEFMT='Total duration: %*E'
strftime -s start 'Start Time: %d/%m/%y %I:%M%P'
{
duration=$(
exec 4>&2 2>&1 1>&3 3>&-
time "$@" 2>&4 4>&-
)
} 3>&1
ret=$?
strftime -s end 'End Time: %d/%m/%y %I:%M%P'
print -rlu2 $start $end $duration
exit $ret
А потом:
$./reporttime sleep 65
Start Time: 02/01/21 09:26am
End Time: 02/01/21 09:26am
Total duration: 1:05.00
Вместо того, чтобы полагаться на time
,вы также можете использовать специальные переменные $SECONDS
или $EPOCHSECONDS
(или $EPOCHREALTIME
/ $epochtime
, если вам нужна гранулярность в доли секунды)
#! /bin/zsh -
zmodload zsh/datetime
start=($epochtime)
"$@"
end=($epochtime) ret=$?
strftime >&2 'Start Time: %FT%T.%3.%z' $start
strftime >&2 'End Time: %FT%T.%3.%z' $end
printf >&2 'Total duration: %.3f\n' $((
end[1] - start[1] + (end[2] - start[2]) / 1e9
))
exit $ret
На этот раз используется стандартный и не -неоднозначный формат времени:
$./reporttime2 sleep 1
Start Time: 2021-01-02T09:50:49.261+0000
End Time: 2021-01-02T09:50:50.264+0000
Total duration: 1.003
Если вы все еще хотите сообщить об этом времени, когда вы нажимаете Ctrl + C или Ctrl + \ , что в противном случае убило бы оба zsh
и время команды, вы можете добавить:
trap true INT QUIT
в верхней части этих скриптов, чтобы оболочка перехватывала эти сигналы и не умирала там. Не выполняйте trap '' INT QUIT
, иначе сигналы будут полностью проигнорированы, и в этом случае синхронизированная команда не будет уничтожена.