我使用的是 VMWare,无论别人怎么说,它都能响应大多数 UNIX 命令。
但有些事情是独一无二的,例如几乎没有文件在重新启动后会保持不变。因此,我遇到了脚本备份的问题,该备份使用变量来命名日志文件:
如果我手动插入
backup-$(date +%Y-%m-%d).log
到 中cron
,日志文件当然会以其启动日期命名。但是,如果我将其插入local.sh
以在重新启动时重新输入cron
作业;
/bin/echo "0 0 * * 1-5 ...backup-$(date +%Y-%m-%d).log
它当然会像这样结束:
backup-2014-07-01.log
所以问题是如何将其写入cron
,以便它最终成为变量而不是日期?
答案1
字符串中的美元符号在运行 echo 时被扩展,并导致随后发生命令替换。你想要的是传递那个字符串作为字符串到文件上。有两种方法可以防止替换发生。
您可以逃避美元符号:
/bin/echo "0 0 * * 1-5 ../..backup-\$(date +%Y-%m-%d).log"
您可以使用单引号而不是双引号来包裹字符串:
/bin/echo '0 0 * * 1-5 ../..backup-$(date +%Y-%m-%d).log'
无论哪种方式,您都可以从任何 shell 测试此语句,看看它是否为您提供文字字符串或运行替换。