Vraag ontsnappen aan dubbele aanhalingstekens en procenttekens (%) in cron


De volgende opdracht werkt vanaf prompt maar niet vanaf crontab.

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

Ik moet het toevoegen aan de dagelijkse cron.


52
2018-05-27 12:27


oorsprong


Je voorbeeld is geweldig, het% is omgeven door dubbele, eenvoudige en achteraanhalingstekens. Laat geen hoop dat citaat ontsnapt zou kunnen werken. - tuxayo


antwoorden:


Je moet ontsnappen aan de % borden. Ze hebben een speciale betekenis in 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.

96
2018-05-27 12:33



+1 Intersting, dat wist ik ook niet. Verbaasd ben ik dit nog niet tegengekomen. - Kyle Smith
Wel, ik ben dit gewoon tegengekomen. Ik was aan het gebruiken date +%F en kwam nergens - adamo
Heeft deze syntaxis nuttig gebruik? Met SHELL=/bin/bash, Ik kan altijd herschrijven cat %Hello world zoals cat <<<'Hello world'. Ik zie geen noodzaak voor speciale syntaxis. - Witiko
@Witiko Als de "speciale syntaxis" waar u naar vraagt, de backslash is om% te ontsnappen, dan is de eigen vraag van het OP een voorbeeld waar het nodig is: opdrachtargumenten die een percentage vereisen, met name het datumprogramma, dat behoorlijk populair zou zijn in een opdracht crontab. Als je eigenlijk vraagt ​​waarom cron deze gotcha in de eerste plaats heeft: ie: vervangt linefeed in plaats van procent, dan denk ik dat het zo is dat je op een enkele regel die crontab nodig heeft, een "commando" kunt leveren dat uit twee bestaat of meer aanvullende opdrachten. - gwideman
Het laatste. En, zoals ik al zei, kan men hetzelfde doen met bash. U hoeft de syntaxis van Cron niet te vullen. - Witiko


Dit beantwoordt niet direct je vraag, maar ik zou willen voorstellen dat je een scriptbestand maakt in / usr / local / bin (of ~ / bin of wat dan ook van toepassing is) en noem dat vanuit cron. Het is gemakkelijker om te testen en te bewerken.


7
2018-05-27 12:48



In mijn ervaring is het veel gemakkelijker om 50 regels in een crontab te onderhouden dan om 50 kleine bestanden te onderhouden. U zult zeker graag langere scripts in scriptbestanden veranderen, maar als u dit doet voor oneliners, kan dat een overdaad zijn. - Witiko