Su ejemplo es sorprendente, el% está rodeado de comillas dobles, simples y anteriores. Sin dejar ninguna esperanza de que escapar de la cita podría funcionar.
tuxayo
Respuestas:
126
Tienes que escapar de las %señales. Tienen un significado especial en 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.
+1 Muy interesante, yo tampoco lo sabía. Sorprendido, no me he encontrado con esto.
Kyle Smith
3
Bueno, acabo de encontrarme con esto. Estaba usando date +%Fy no estaba llegando a ninguna parte
adamo
2
¿Esta sintaxis tiene algún uso útil? Con SHELL=/bin/bash, siempre puedo reescribir cat %Hello worldcomo cat <<<'Hello world'. No veo la necesidad de una sintaxis especial.
Witiko
@Witiko Si la "sintaxis especial" que está preguntando es la barra invertida para escapar del porcentaje, entonces la propia pregunta del OP es un ejemplo donde se necesita: argumentos de comando que requieren un porcentaje, especialmente el programa de fecha, que sería bastante popular en un comando crontab. Si realmente está preguntando por qué cron tiene este problema en primer lugar: es decir: sustituye el salto de línea en lugar del porcentaje, entonces supongo que es para que pueda suministrar, en una sola línea que requiere crontab, un "comando" que consta de dos o más comandos subsidiarios.
gwideman
El último. Y, como mencioné, uno puede hacer lo mismo con bash. No es necesario ensuciar la sintaxis de Cron.
Witiko
7
Esto no responde directamente a su pregunta, pero sugeriría que cree un archivo de script en / usr / local / bin (o ~ / bin o lo que sea apropiado) y que lo llame desde cron. Es más fácil de probar y editar.
En mi experiencia, es mucho más fácil mantener 50 líneas en un crontab que mantener 50 archivos pequeños. Seguramente querrá convertir los scripts más largos en archivos de script, pero hacerlo para una sola línea puede ser una exageración.
Respuestas:
Tienes que escapar de las
%
señales. Tienen un significado especial en crontabs:fuente
date +%F
y no estaba llegando a ninguna parteSHELL=/bin/bash
, siempre puedo reescribircat %Hello world
comocat <<<'Hello world'
. No veo la necesidad de una sintaxis especial.Esto no responde directamente a su pregunta, pero sugeriría que cree un archivo de script en / usr / local / bin (o ~ / bin o lo que sea apropiado) y que lo llame desde cron. Es más fácil de probar y editar.
fuente