Zsh命令替换

时间:2010-05-21 14:21:37

标签: cron zsh

我通常使用BASH,但我正在尝试从配置了zsh的计算机和用户帐户设置cronjob。当cronjob运行时,日期变量不包含日期,只是命令返回日期的字符串。

DATE=$(date +%Y%m%d)
55 15 *  *  1-5  scp user@host:/path/to/some/file/$DATE.log /tmp

我尝试在命令周围使用反引号而不是$(),但这也不起作用。是否有一种特殊的方法在zsh中执行命令替换?

2 个答案:

答案 0 :(得分:3)

如果这是来自用户的crontab的一行,那么设置变量的行不是由shell设置的,它是由cron本身设置的 - 正如你所发现的那样,它没有做很多解释关于价值观!

do 得到设置,但在流程环境中设置文字值 - 并且环境变量在展开后不会被进一步解释 - 因此$(date)保持为{{1正如你所见。

最简单的方法是:

$(date)

反引号``是插入命令结果的另一种方法,它可以在比55 15 * * 1-5 scp user@host:/path/to/file/`date +%Y%m%d`.log /tmp 更多的shell中工作(虽然它不太灵活,因为你不能嵌套它)。

答案 1 :(得分:2)

我认为cron设置环境变量的方式不支持$()。它甚至不支持变量替换。

我认为您必须将日期计算放入cron命令:

55 15 *  *  1-5  scp user@host:/path/to/some/file/$(date +%Y%m%d).log /tmp

或创建另一个设置变量的脚本,然后用它调用scp(当然你可以在crontab中调用那个脚本)。