уникаючи подвійних лапок і знаків відсотків (%) у кроні


75

Наступна команда працює з підказки, але не з crontab.

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

Мені потрібно додати його до щоденного крона.


Ваш приклад дивовижний,% оточений подвійними, простими та зворотними лапками. Не залишаючи надії, що втеча цитати може спрацювати.
tuxayo

Відповіді:


126

Ви повинні уникнути %знаків. Вони мають особливе значення в 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.

7
+1 Дуже цікаво, я теж цього не знав. Здивований, що я не наткнувся на це.
Кайл Сміт

3
Ну я просто натрапив на це. Я використовував date +%Fі діставатись нікуди
adamo

2
Чи має цей синтаксис корисне використання? З SHELL=/bin/bash, я завжди можу переписати cat %Hello worldяк cat <<<'Hello world'. Я не бачу потреби в спеціальному синтаксисі.
Вітіко

@Witiko Якщо "спеціальний синтаксис", про який ви запитуєте, - це зворотний косий рядок, який слід отримати, тоді власне питання ОП - це приклад, коли це потрібно: аргументи команд, які вимагають відсотків, зокрема програма дати, яка була б досить популярною в команда crontab. Якщо ви насправді запитуєте, чому у cron в першу чергу є ця готча: тобто: замінює linefeed замість відсотків, то, мабуть, це так, що ви можете в одному рядку, який вимагає crontab, надати "команду", що складається з двох або більше допоміжних команд.
gwideman

Лист. І, як я вже згадував, можна зробити те ж саме з басом. Не потрібно засмічувати синтаксис Cron.
Вітіко

7

Це не відповідає безпосередньо на ваше запитання, але я б запропонував вам створити файл сценарію в / usr / local / bin (або ~ / bin або що завгодно) і зателефонувати йому з cron. Простіше тестувати та редагувати.


2
З мого досвіду, набагато простіше підтримувати 50 рядків у crontab, ніж підтримувати 50 крихітних файлів. Ви хочете перетворити більш довгі сценарії у файли сценаріїв, але робити це для однокласників може бути надлишком.
Вітіко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.