Дата: опция требует аргумент

Может кто-нибудь сказать мне, что я делаю неправильно, пожалуйста?

У меня есть этот блок кода

  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, и я подозреваю, что это как-то связано с форматом даты. Я просто не уверен, что это такое.

Вероятно, вы используете MacOS с синтаксисом FreeBSD date. Тот, который вы разместили с -d, специфичен для GNU.

Inian 18.12.2020 19:44

Кстати, не нужно expr: exp_sec=$(( $(date ...) - $(date +%s) )).

chepner 18.12.2020 19:46
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
2
1 232
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Формат даты по умолчанию для 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. Мне просто нужно выяснить формат ввода для этого будет.

Hammed 20.12.2020 13:19
%Y-%m-%dT%H:%M%S+00:00.
chepner 20.12.2020 14:34

Выдает эту ошибку Failed conversion of ``2020-12-21T02:00:12+00:00'' using format ``%Y-%m-%dT%H:%M%S+00:00'' Я чувствую, что сейчас делаю что-то не так, но я не уверен, что это такое.

Hammed 20.12.2020 15:01

Я пропустил двоеточие между %M и %S.

chepner 20.12.2020 16:01

Другие вопросы по теме