grep abc /var/log/messages | grep "`date '+%B %d'`" | mail -s"abc log of `hostname`" shantanu.oak+`hostname`@gmail.com
我需要将其添加到日常cron中。
#1 楼
您必须转义%
标志。它们在crontabs中具有特殊含义:man (5) crontab:
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.
评论
好吧,我确实碰到了这一点。我正在使用日期+%F,却一无所获
– adamo
15年2月20日在12:14
这个语法有什么用吗?使用SHELL = / bin / bash,我始终可以将cat%Hello world重写为cat <<<'Hello world'。我认为不需要特殊语法。
–Witiko
17年7月19日在13:54
@Witiko如果您要问的“特殊语法”是反斜杠以逃避百分比,那么OP自身的问题就是需要使用示例的例子:需要百分比的命令参数,尤其是日期程序,在命令行中非常流行crontab命令。如果您实际上是在问为什么cron首先要解决此难题:即:用换行代替%,那么我想您可以在crontab要求的单行中提供由以下两个组成的“命令”或更多辅助命令。
– gwideman
18-09-6在3:57
后者。而且,正如我提到的,使用bash可以做到这一点。无需乱写Cron的语法。
–Witiko
18/09/6在11:11
#2 楼
这不能直接回答您的问题,但是我建议您在/ usr / local / bin(或〜/ bin或任何合适的文件)中创建一个脚本文件,然后从cron调用它。测试和编辑更加容易。评论
以我的经验,在crontab中维护50行比维护50个小文件要容易得多。您肯定会想要将更长的脚本转换为脚本文件,但是这样做对于单行脚本可能是一个过大的杀伤力。
–Witiko
17-10-3在0:13
评论
您的示例非常了不起,%用双引号,简单引号和反引号引起来。寄希望于转义引号不可行。