%(百分号)在 crontab 中有何特殊之处?

问题描述 投票:0回答:2

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

* * * * * echo $( date +%F) >> /path/date.txt
shell unix cron
2个回答
36
投票

您的 crontab 行的实际问题不是

$()
或反引号。问题是百分号
%
。它在 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.
...

如果您使用

\
转义百分号,它应该按预期工作:

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

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

两者都可以在我的网站上使用。


0
投票

%(百分号)在 crontab 中有何特殊之处?

查看手册页:

man -Pless\ +/% 5 crontab

...命令中的百分号(%),除非用反斜杠(\)转义,否则将被更改为换行符...

你的例子

首先避免无用的分叉(

echo $(date +%F)
无用。)!

* * * * * date +\%F >> /path/date.txt

另一个样本

* * * * * cat >>$(date +testfile-\%F.txt)%This is 3 more lines%in same file%Uh!

这将在每日文件中添加 3 行。

甚至,在 crontab 中混合 bash:

* * * * * bash >>$(date +testfile-\%F.txt)%echo This is 3 more lines%echo in same file%printf '\%(\%a \%d \%b)T Uh!\n'

但不要这样做,它不可读!

© www.soinside.com 2019 - 2024. All rights reserved.