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/sh
nebo pomocí shellu specifikovaného v
SHELL
promě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.