如何在不评估命令的情况下使用bash插入cronjobs?

时间:2020-05-05 20:19:57

标签: bash cron escaping

我正在使用bash oneliner创建cronjob,将文件保存到取决于当前时间的路径,因此我正在使用date。但是,date表达式是在插入cronjob时求值的,而我希望date表达式是在cron运行作业时求值的。

我的命令是这样的:

bash -c "(crontab -r; echo \"* * * * * /usr/bin/wget -o /backups/\$(date +\%F_\%R).sql 127.0.0.1:8000/api/export/full\") | crontab -"

如何更改此命令以实现此目的?

2 个答案:

答案 0 :(得分:3)

将参数echo放在单引号而不是双引号中,因此其中$(...)不会有任何评估。

通过管道传输到crontab -r的命令中也不需要包含crontab -

bash -c "crontab -r; echo '* * * * * /usr/bin/wget -o /backups/\$(date +\%F_\%R).sql 127.0.0.1:8000/api/export/full' | crontab -"

答案 1 :(得分:0)

使用单引号而不是双引号。 Bash不会在带单引号的字符串中进行变量扩展。您可以对内部字符串(要回显的参数)使用单引号,也可以对外部字符串使用单引号(然后对内部字符串使用不转义的双引号)