tags:

views:

104

answers:

3

The following statement work at command prompt. But does not work in a cron.

myvar=`date +'%d%m'`; echo $myvar >> append.txt

The cron log shows that only a part of the date statement is run. How do I use it in a cron?

+1  A: 

Escape the percent signs with a backslash (\%).

Ignacio Vazquez-Abrams
Tried. But not working.
shantanuo
It is working now. I was escaping the space as well.
shantanuo
+1  A: 

My general rule of thumb is "do not write scripts in the crontab file". That means I don't place anything other than a simple script name (with absolute path) and possibly some control arguments in the crontab file. In particular, I do not place I/O redirection or variable evaluations in the crontab file; such things go in a (shell) script run by the cron job.

This avoids the trouble - and works across a wide variety of variants of cron, both ancient and modern.

Jonathan Leffler
+1  A: 

from man 5 crontab:

The sixth field (the rest of the line) specifies the command to be run. The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the cronfile. 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.

Your %s are being changed to newlines, and the latter part of your command is being fed to the command as stdin. As Ignacio says, you need to escape the %s with a \

James Polley