我正在使用bash oneliner创建一个cronjob,该cronjob将文件保存到取决于当前时间的路径,因此我使用date
。但是,插入cronjob时会计算date
表达式,而我希望在cron运行作业时计算date
表达式。
我的命令是这样的:
bash -c "(crontab -r; echo "* * * * * /usr/bin/wget -o /backups/$(date +%F_%R).sql 127.0.0.1:8000/api/export/full") | crontab -"
如何更改此命令以实现此目的?
将echo
的参数放在单引号中,而不是双引号中,这样就不会对$(...)
进行任何求值。
也不需要在通过管道传输到crontab -
的命令中包含crontab -r
。
bash -c "crontab -r; echo '* * * * * /usr/bin/wget -o /backups/$(date +%F_%R).sql 127.0.0.1:8000/api/export/full' | crontab -"
使用单引号而不是双引号。Bash不在带有单引号的字符串中进行变量展开。您可以对内部字符串(要回显的参数(使用单引号,也可以对外部字符串(然后对内部字符串使用无标题双引号(