2011-03-11 119 views
17

在crontab中,你能做这样的事吗?crontab中的%特殊情况如何?

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

邮件让我看看这个。 /bin/sh -c“echo $(日期+ /bin/sh:-c:第0行:寻找匹配的意外EOF)' /bin/sh:-c:第1行:语法错误:意外文件末尾 – JuanPablo 2011-03-11 19:54:39

+0

这是[无用的'echo'](http://www.iki.fi/era/unix/award.html#echo),看起来像'echo $(foo)'的任何东西都是更好地写成'foo'(除非你专门使用一个不加引号的命令替换来使shell对'whoo'进行规范化并扩展通配符) – tripleee 2016-08-30 04:15:28

回答

31

你的crontab行的实际问题不是$()或反引号。问题是百分号%。它在crontabs中有特殊的含义。

从手册页:

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

如果你逃跑用\百分号预期它应该工作:

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

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

我的网站上都工作。

+2

请注意,反斜杠被传递给shell。上面的那个可以工作,因为shell剥去了反斜杠,但是一个字符串中的反斜杠会被shell留下,按照http://www.hcidata.info/crontab.htm – 2013-11-27 09:37:41

+1

我讨厌cron与复仇 – Willem 2015-06-03 10:17:50