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

How to insert cronjobs using bash without evaluating command?

我正在使用 bash oneliner 创建一个 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 不对带单引号的字符串进行变量扩展。您可以对内部字符串(要回显的参数)或外部字符串使用单引号(然后对内部字符串使用未转义的双引号)