Чем отличается % в crontab?

В crontab можно сделать что-то подобное?

* * * * * echo $( date +%F) >> /path/date.txt

person JuanPablo    schedule 11.03.2011    source источник
comment
почта покажи мне это. /bin/sh -c echo $( date + /bin/sh: -c: строка 0: неожиданный конец файла при поиске соответствия `)' /bin/sh: -c: строка 1: синтаксическая ошибка: неожиданный конец файла   -  person JuanPablo    schedule 11.03.2011
comment
Однако это бесполезное использование echo. Все, что выглядит как echo $(foo), лучше писать просто foo (если вы специально не используете подстановку команд без кавычек, чтобы заставить оболочку нормализовать пробелы и расширять подстановочные знаки в выводе foo).   -  person tripleee    schedule 30.08.2016


Ответы (1)


Фактическая проблема вашей строки crontab заключается не в $() или обратных кавычках. Проблема в знаке процента %. Он имеет особое значение в crontabs.

Из справочной страницы:

...
Percent-signs (%) in the command, unless escaped with backslash (\), 
will be changed into newline characters, and all data after the 
first % will be sent to the command  as standard input.
...

Если вы избегаете знака процента с помощью \, он должен работать так, как ожидалось:

* * * * * echo $(date +\%F) >> /tmp/date.txt

or

* * * * * echo `date +\%F` >> /tmp/date2.txt

оба работают на моем сайте.

person bmk    schedule 11.03.2011
comment
Имейте в виду, что обратная косая черта передается оболочке. Таким образом, команда, подобная приведенной выше, будет работать, потому что оболочка удаляет обратную косую черту, но обратная косая черта внутри строки будет оставлена ​​оболочкой, как hcidata.info/crontab.htm - person Alastair Irvine; 27.11.2013
comment
Я ненавижу cron с местью - person Willem; 03.06.2015