2011-03-11 15 views
17

En crontab, ¿puedes hacer algo como esto?¿Cómo es% especial en crontab?

* * * * * echo $(date +%F) >> /path/date.txt 
+1

mail show me this. /bin/sh -c "echo $ (date + /bin/sh: -c: línea 0: EOF inesperado al buscar el emparejamiento') ' /bin/sh: -c: línea 1: error de sintaxis: inesperado Fin del archivo – JuanPablo

+0

Eso es un [uso inútil de 'echo'] (http://www.iki.fi/era/unix/award.html#echo), sin embargo. Cualquier cosa que se vea como' echo $ (foo) 'es mejor escrito simplemente 'foo' (a menos que use específicamente una sustitución de comando sin comillas para hacer que el intérprete de comandos normalice espacios en blanco y expanda comodines en el resultado de' foo'). – tripleee

Respuesta

31

El problema real de su línea de crontab no es el $() o los acentos graves. El problema es el signo de porcentaje %. Tiene un significado especial en crontabs.

Desde la página de manual:

... 
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. 
... 

Si escapar el signo de porcentaje con \ que debería funcionar como se esperaba:

* * * * * echo $(date +\%F) >> /tmp/date.txt 

o

* * * * * echo `date +\%F` >> /tmp/date2.txt 

tanto trabajo en mi sitio.

+2

Tenga en cuenta que las barras invertidas se pasan al intérprete. el de arriba funcionará porque el proyectil despoja a la barra diagonal inversa, pero el caparazón dejará una barra invertida dentro de una cadena, según http://www.hcidata.info/crontab.htm –

+1

Odio el cron con furia – Willem