Chci vytvořit soubor protokolu pro skript cron, který má v názvu souboru protokolu aktuální hodinu. Toto je příkaz, který jsem se pokusil použít:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Bohužel se mi při spuštění zobrazí tato zpráva:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
Pokusil jsem se uniknout date rozdělit různými způsoby, ale bez velkého štěstí. Je možné to provést in-line v souboru crontab nebo k tomu musím vytvořit skript shellu?
Přijatá odpověď:
Krátká odpověď:
Escape % jako % :
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Dlouhá odpověď:
Chybová zpráva naznačuje, že shell, který provádí váš příkaz, nevidí druhý znak zpětného zaškrtnutí:
/bin/sh: -c: line 0: unexpected EOF while looking for matching '`'
To je také potvrzeno druhou chybovou zprávou, kterou jste obdrželi, když jste zkusili jednu z dalších odpovědí:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ')'
Manuální stránka crontab potvrzuje, že příkaz je přečten pouze do prvního neescapovaného % znak:
Pole „šesté“ (zbytek řádku) specifikuje příkaz, který se má
spustit. Celá příkazová část řádku až po nový řádek nebo%znak, bude proveden/bin/shnebo pomocí shellu specifikovaného v
SHELLproměnná cronfile. Znaménka procenta (%) ve příkaz, pokud není ukončen zpětným lomítkem (), bude změněn na znaky nového řádku a všechna data po prvním%bude odesláno
příkazu jako standardní vstup.