Оценить математическое выражение в cron

Я хочу назвать файл в соответствии с паритетом дня недели. В терминале работает следующее: $(($(date +\%u)%2))

Но это не работает в cron (я подозреваю, что оценка математических выражений не работает).

Как я могу заставить это работать в cron?

Вы избежали одного процента, а не другого:

 $(($(date +\%u)%2)) ^ HERE 

Все процентные знаки в записи crontab должны быть экранированы, потому что у них есть особое значение. Процитировать из crontab (5) manpage:

Вся командная часть строки, вплоть до символа новой строки или%, будет выполнена / bin / sh или оболочкой, указанной в переменной SHELL файла crontab. Процентные знаки (%) в команде, если они не сбрасываются с помощью обратного слэша (), будут изменены на символы новой строки, а все данные после первого% будут отправлены команде в качестве стандартного ввода.

Следует признать, что этот пункт можно сформулировать лучше.

Так что это должно быть:

 $(($(date +\%u)\%2)) 

Из crontab(5)

Несколько параметров среды автоматически создаются демоном cron (8). SHELL установлен в / bin / sh,

и sh ничего не знают о них фантазии математики. Это предполагает два возможных решения; во-первых, установить SHELL в какую-либо другую оболочку, такую ​​как SHELL=/bin/bash или вместо этого, чтобы сохранить файл cron несложным и вызвать скрипт, который затем содержит любую математическую бизнес-логику даты. ( % также является специальным по crontab(5) , кстати)

Создайте две записи cron.

Один, который работает в дни с нулевым паритетом (используйте поле «день недели» в crontab), который записывает в файл с нулевым именем. И еще один, который работает по дням с одним паритетом, который записывает в файл с именем с одним.