Может кто-нибудь сказать мне, что я делаю неправильно, пожалуйста?
У меня есть этот блок кода
if [ -n "${MFA_Exp}" ]; then
exp_sec = "$(expr '(' $(date -d "${MFA_Exp}" +%s) - $(date +%s) ')' )";
if [ "${exp_sec}" -gt 0 ]; then
output+ = ", MFA TTL: $(date -u -d @"${exp_sec}" +"%Hh %Mm %Ss")";
else
output+ = ", MFA DEAD!";
fi;
это должно вывести время истечения срока действия моего токена MFA, но я получаю эту ошибку
date: option requires an argument -- d
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
У меня Macbook, и я подозреваю, что это как-то связано с форматом даты. Я просто не уверен, что это такое.
Кстати, не нужно expr
: exp_sec=$(( $(date ...) - $(date +%s) ))
.
Формат даты по умолчанию для BSD date
— [[[mm]dd]HH]MM[[cc]yy][.ss]]
. Если MFS_Exp
в этом формате, вы можете использовать
exp_sec=$(( $(date -j "$MFS_Exp" +%s) - $(date +%s) ))
Если нет, вам нужно указать формат ввода с помощью опции -f
. Например, если ваша строка похожа на 2020-12-18 12:34:56
, используйте date -j -f '%Y-%m-%d %H:%M:%S' "$MFS_Exp" +%s
.
Для второго вызова я бы вообще не рекомендовал использовать date
, так как вы работаете с продолжительностью, а не с меткой времени.
hours=$(( exp_sec / 3600 ))
rem=$(( exp_sec % 3600 ))
minutes=$(( rem / 60 ))
sec=$(( rem % 60 ))
output+ = ", MFA TTL: ${hours}h ${minutes}m ${sec}s"
Вот как выглядит вывод моей строки 2020-12-20T23:28:16+00:00
. Мне просто нужно выяснить формат ввода для этого будет.
%Y-%m-%dT%H:%M%S+00:00
.
Выдает эту ошибку Failed conversion of ``2020-12-21T02:00:12+00:00'' using format ``%Y-%m-%dT%H:%M%S+00:00''
Я чувствую, что сейчас делаю что-то не так, но я не уверен, что это такое.
Я пропустил двоеточие между %M
и %S
.
Вероятно, вы используете MacOS с синтаксисом FreeBSD
date
. Тот, который вы разместили с-d
, специфичен для GNU.