Вопрос: избегая двойных кавычек и процентов знаков (%) в cron


Следующая команда работает из приглашения, но не из crontab.

 grep abc  /var/log/messages | grep "`date '+%B %d'`" | mail -s"abc log of `hostname`" shantanu.oak+`hostname`@gmail.com

Мне нужно добавить его в ежедневный cron.


48
2018-05-27 12:27


Источник


Ваш пример потрясающий,% окружен двойными, простыми и обратными кавычками. Не теряя надежды на то, что побег цитат может сработать. - tuxayo


Ответы:


Вы должны избегать % знаки. Они имеют особое значение в crontabs:

man (5) crontab:

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.

89
2018-05-27 12:33



+1 Очень интересно, я тоже этого не знал. Удивленный я не сталкивался с этим. - Kyle Smith
Ну, я просто наткнулся на это. Я использовал date +%F и никуда не денется - adamo
Использует ли этот синтаксис какое-либо полезное применение? С SHELL=/bin/bash, Я всегда могу переписать cat %Hello world в виде cat <<<'Hello world', Я не вижу необходимости в специальном синтаксисе. - Witiko


Это напрямую не отвечает на ваш вопрос, но я бы предположил, что вы создаете файл сценария в / usr / local / bin (или ~ / bin или что-то подходящее) и вызываете это из cron. Это легче проверить и отредактировать.


5
2018-05-27 12:48



По моему опыту, гораздо проще поддерживать 50 линий в кронтабе, чем поддерживать 50 крошечных файлов. Вы захотите включить более длинные скрипты в файлы сценариев, но сделать это для однострочных может быть чрезмерным. - Witiko