tcsh: дата печати 2 недели назад в оболочке

В tcsh на OpenBSD мне нужно напечатать дату двухнедельной давности.

Например. если сегодня 2013-03-02, мне нужно распечатать 2013-02-16.


person cnst    schedule 03.03.2013    source источник


Ответы (2)


Похоже, что tcsh не позволяет выполнять вложенные команды, поэтому похоже, что нужно использовать ksh.

date +%Y-%m-%d ; \
sh -c 'date -r $(expr $(date +%s) - $(expr 60 \* 60 \* 24 \* 14)) +%Y-%m-%d'
2013-03-02
2013-02-16

Мы получаем дату в количестве секунд, прошедших с начала эпохи в формате UTC, и вычисляем две недели в секундах с помощью expr, вычитаем и передаем эти секунды обратно в date с аргументом -r.

Не уверен, что есть более короткое решение, кроме использования 1209600 вместо $(expr 60 \* 60 \* 24 \* 14):

sh -c 'date -r $(expr $(date +%s) - 1209600) +%Y-%m-%d'
person cnst    schedule 03.03.2013
comment
я потратил более 10 минут, чтобы понять, почему он не выдает вывод в моей оболочке ... затем я увидел ваш комментарий ... :( - person alamin; 28.04.2018

Это должно работать (это работает на дату GNU. Я не очень хорошо знаком с OpenBSD. Поэтому не уверен, что это работает для вас)

date -d "now - 14 days" +%Y-%m-%d
person Navaneeth Krishnan M    schedule 15.04.2013
comment
Нет, это явно не работает. Но интересная альтернатива для пользователей GNU/Linux! - person cnst; 19.04.2013