Если вы хотите сделать это в течение текущего времени +/- 5 минут, и вы используете Bash 4.2 или более поздней версии, вы можете сделать это без внешних инструментов:
$ printf -v now '%(%s)T'
$ echo "$now"
1516161094
$ f='%a %b %d %R'
$ printf "%($f)T %($f)T %($f)T\n" "$((now-300))" "$now" "$((now+300))"
Tue Jan 16 22:46 Tue Jan 16 22:51 Tue Jan 16 22:56
%(datefmt)T
форматирования строки printf
позволяет печатать строки даты и времени. Если аргумент пропущен (например, здесь) или равен -1
, используется текущее время.
%s
форматирует время в секундах с эпохи, а -v now
сохраняет вывод в now
вместо его печати.
f
- просто удобная переменная, поэтому мне не нужно повторять строку форматирования для вывода три раза.
Поскольку аргумент для этого использования printf
должно быть в секундах с начала эпохи, вы застряли с внешними инструментами для преобразования входной строки как Thu Dec 19 14:10
в этот формат, и вы бы заменить
printf -v now '%(%s)T'
с, например, любой из
now=$(date '+%s' -d 'Thu Dec 19 14:10') # GNU date
now=$(date -j -f '%a %b %d %T' 'Thu Dec 19 14:10' '+%s') # macOS date
И делать это от времени спецификации плаката, 'ISODate = $ (дата --rfc-3339 = секунды -d "Чты дека 19, 14:10"); date -d "$ isodate + 5 минут" ' –