在 cron 中转义双引号和百分号 (%)

sha*_*nuo 95 cron

以下命令在提示符下工作,但不在 crontab 中工作。

 grep abc  /var/log/messages | grep "`date '+%B %d'`" | mail -s"abc log of `hostname`" shantanu.oak+`hostname`@gmail.com
Run Code Online (Sandbox Code Playgroud)

我需要将它添加到每日 cron 中。

bmk*_*bmk 160

你必须逃离这些%迹象。它们在 crontab 中有特殊的含义:

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.
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我只是遇到了这个。我正在使用 `date +%F` 并且一无所获 (9认同)
  • 这个语法有什么用处吗?使用`SHELL=/bin/bash`,我总是可以将`cat %Hello world` 重写为`cat <<<'Hello world'`。我认为不需要特殊语法。 (5认同)

Ran*_*son 7

这不能直接回答您的问题,但我建议您在 /usr/local/bin(或 ~/bin 或任何适当的文件)中创建一个脚本文件,并从 cron 调用它。测试和编辑更容易。

  • 根据我的经验,在 crontab 中维护 50 行比维护 50 个小文件要容易得多。您肯定希望将较长的脚本转换为脚本文件,但对于单行脚本来说这样做可能是一种矫枉过正。 (5认同)