我正在使用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 -"
如何更改此命令以实现此目的?
答案 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不会在带单引号的字符串中进行变量扩展。您可以对内部字符串(要回显的参数)使用单引号,也可以对外部字符串使用单引号(然后对内部字符串使用不转义的双引号)