Трубы STDOUT и STDERR отдельно

Это близко к перепосту этого вопроса . Адаптация их сценария к вашему формату дает нам этот набор команд:

echo "$(( $(date -d "$d2" +%s) - $(date -d "$d1" +%s) )) / 86400" | bc -l

, где $d1 — меньшая (более ранняя дата ), а $d2 — большая (более поздняя )дата.

Итак, насколько я могу судить, это должно сработать:

echo "$(( $(date -d "$modDate" +%s) - $(date -d "$now" +%s) )) / 86400" | bc -l

Чтобы уточнить,

bc -l

Согласно справочной странице,

...a language that supports arbitrary precision numbers with interactive execution of statements. There are some similarities in the syntax to the C programming language.

Это позволяет вам получить десятичные числа в вашем ответе, так как большинство оболочек поддерживают только целочисленное деление.

2
22.06.2020, 09:40
1 ответ

Вы можете сделать это, используя bash процесс -подстановку:

Обратите внимание, что вы должны перенаправить его обратно в stderr, чтобы он не попал в канал stdout:

$ perl -E 'say {*STDOUT} "hi"; say {*STDERR} "bye"' \
        > >(sed s/^/out:/)                          \
       2> >(sed s/^/err:/ >&2)
1
18.03.2021, 23:25

Теги

Похожие вопросы