У меня есть сценарий bash, в котором я извлекаю дату из последней строки текстового файла, добавляя 1 день ко времени, а затем записываю эту дату обратно в файл. Идея состоит в том, чтобы каждый раз добавлять по 24 часа. Мой код выглядит следующим образом:

start_date=$(date -d "$(tail -n 1 run_dates.txt) +1 day" '+%F %T')
echo "$start_date" >> run_dates.txt

Выходной файл (run_dates.txt) выглядит так:

2018-09-18 16:42:57
2018-09-19 11:42:57
2018-09-20 06:42:57
2018-09-21 01:42:57
2018-09-21 20:42:57

По какой-то причине каждый раз добавляется только 19 часов, а не полный день. Есть идеи, что это?

0
intA 19 Сен 2018 в 19:22

2 ответа

Лучший ответ

Анализатор даты произвольной формы date, кажется, довольно запутался с + something в конце даты и времени. Вся кровавая информация здесь: https: // www. gnu.org/software/coreutils/manual/html_node/Date-input-formats.html

Получаю похожие результаты:

$ tail -n 1 run_dates.txt
2018-09-21 20:42:57
$ date -d "$(tail -n 1 run_dates.txt) +1 day" '+%F %T'
2018-09-22 15:42:57

Но если вы попросите «завтра» вместо «+1 день»:

$ date -d "$(tail -n 1 run_dates.txt) tomorrow" '+%F %T'
2018-09-22 20:42:57
2
glenn jackman 19 Сен 2018 в 16:47

Для добавления / вычитания интервала к команде даты не используйте "+". Если вы опустите +, он добавляет, для вычитания вы можете использовать ключевое слово «назад» вместе с частью даты. вот несколько примеров

> date -d "2018-09-21 20:42:57 1 day 2 hours" "+%F %T"
2018-09-22 22:42:57
> date -d "2018-09-21 20:42:57 1 day ago 2 hours ago" "+%F %T"
2018-09-20 18:42:57
> date -d "2018-09-21 20:42:57 1 day 2 hours 12 minutes" "+%F %T"
2018-09-22 22:54:57
> date -d "2018-09-21 20:42:57 1 day 2 hours ago 12 minutes" "+%F %T"
2018-09-22 18:54:57
>
0
stack0114106 20 Сен 2018 в 15:00