crontab 中的 % 有啥特别之处?

Posted

技术标签:

【中文标题】crontab 中的 % 有啥特别之处?【英文标题】:How is % special in crontab?crontab 中的 % 有什么特别之处? 【发布时间】:2011-07-13 17:54:59 【问题描述】:

在crontab中,你能做这样的事情吗?

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

【问题讨论】:

邮件告诉我这个。 /bin/sh -c " echo $( date + /bin/sh: -c: line 0: 寻找匹配的 `)' 时出现意外 EOF /bin/sh: -c: line 1: 语法错误:文件意外结束 不过,这是一个useless use of echo。任何看起来像 echo $(foo) 的东西都最好直接写成 foo(除非您专门使用不带引号的命令替换来使 shell 规范化空格并在 foo 的输出中扩展通配符)。 【参考方案1】:

您的 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

两者都在我的网站上工作。

【讨论】:

请注意,反斜杠会传递给 shell。所以像上面这样的命令会起作用,因为 shell 会去掉反斜杠,但是 shell 会留下字符串中的反斜杠,根据hcidata.info/crontab.htm 我非常讨厌 cron

以上是关于crontab 中的 % 有啥特别之处?的主要内容,如果未能解决你的问题,请参考以下文章

结构体有啥特别之处?

Generic.xaml 有啥特别之处?

使用 StringBuilder 而不是 StringBuffer 有啥特别之处 [重复]

html中字符集"UTF-8" 有啥特别之处吗?

代码签名证书有啥特别之处?

以“tree”开头的 gcc 标志有啥特别之处?