Quiero crear un archivo de registro para un script cron que tenga la hora actual en el nombre del archivo de registro. Este es el comando que traté de usar:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Desafortunadamente recibo este mensaje cuando se ejecuta:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
He intentado escapar de la date
parte de varias maneras, pero sin mucha suerte. ¿Es posible hacer que esto suceda en línea en un archivo crontab o necesito crear un script de shell para hacer esto?
Respuesta aceptada:
Respuesta corta:
Escapar del %
como %
:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Respuesta larga:
El mensaje de error sugiere que el shell que ejecuta su comando no ve el segundo carácter de marca de retroceso:
/bin/sh: -c: line 0: unexpected EOF while looking for matching '`'
Esto también se confirma con el segundo mensaje de error que recibió cuando probó una de las otras respuestas:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ')'
La página de manual de crontab confirma que el comando es de solo lectura hasta el primer %
sin escape firmar:
El campo "sexto" (el resto de la línea) especifica el comando a
ejecutar. La parte de comando completa de la línea, hasta una nueva línea o %
carácter, será ejecutado por /bin/sh
o por el shell especificado en
el SHELL
variable del archivo cron. Signos de porcentaje (%
) en el comando, a menos que se escape con una barra invertida ( ), se transformará en caracteres de nueva línea y todos los datos después del primer
%
se enviará a
el comando como entrada estándar.