Почему процентные знаки (%) не работают в crontab?

Я пишу файлы в журнал, запущенный bash script, используя cron. Вызов cron выглядит так:

*/25 * * * * bash script.sh > "/var/log/$(date +%Y-%m-%d_%H:%M).log"

Но когда я проверяю crontab, он записывается как

*/25 * * * * bash script.sh > "/var/log/$(date +).log"

И он никогда не записывает файл журнала. Есть ли что-то, что мне нужно изменить, чтобы получить cron, чтобы записать дату?

Ответы

Ответ 1

Это вопрос выхода из переменных:

* * * * * /usr/bin/touch /tmp/$(date +\%Y:\%m).log
#                                      ^   ^

работал со мной.

От man 5 crontab:

Значения Percent (%) в команде, если не сбрасываются с помощью обратного слэша (\), будут изменены на символы новой строки, а все данные после первого% будут отправлены команде в качестве стандартного ввода.

Итак,

*/25 * * * * /bin/bash script.sh > "/var/log/$(date +\%Y-\%m-\%d_\%H:\%M).log"
#                                                    ^    ^   ^   ^   ^

должен работать.

Примечание. Я использовал /bin/bash вместо bash.