我通常使用BASH,但我试图从配置了zsh的机器和用户帐户设置cronjob。当cronjob运行时,date变量不包含日期,只是命令返回日期的字符串。Zsh命令替换
DATE=$(date +%Y%m%d)
55 15 * * 1-5 scp [email protected]:/path/to/some/file/$DATE.log /tmp
我试过在命令周围使用反引号而不是$(),但那也不起作用。有没有一种特殊的方式在zsh中进行命令替换?
我通常使用BASH,但我试图从配置了zsh的机器和用户帐户设置cronjob。当cronjob运行时,date变量不包含日期,只是命令返回日期的字符串。Zsh命令替换
DATE=$(date +%Y%m%d)
55 15 * * 1-5 scp [email protected]:/path/to/some/file/$DATE.log /tmp
我试过在命令周围使用反引号而不是$(),但那也不起作用。有没有一种特殊的方式在zsh中进行命令替换?
如果这是用户的crontab中的一行,那么设置该变量的行不是由shell设置的,它是由cron本身设置的 - 正如你发现的那样,它并没有做很多对价值的解读!
值做得到确定,但在这个过程中的环境中设置文字值 - 和环境变量没有得到扩张后进一步解释 - 所以$(date)
住宿为$(date)
,如您所见。
做最简单的事情是:
55 15 * * 1-5 scp [email protected]:/path/to/file/`date +%Y%m%d`.log /tmp
的反引号``是另一种插值命令的结果,更多的炮弹比$(command)
作品(尽管它不太灵活,因为你不能嵌套它)。
我不认为设置环境变量的cron
方式支持$()
的东西。它甚至不支持变量替换。
我认为你要么必须把日期计算到cron
命令:
55 15 * * 1-5 scp [email protected]:/path/to/some/file/$(date +%Y%m%d).log /tmp
或创建另一个脚本,然后设置变量调用scp
它(当然你打电话是脚本从您的crontab
)。
如果你添加一行到类似于这个:'* * * * * env>/tmp/cron.env'的crontab,你可能会在该文件中找到'SHELL =/bin/sh',无论用户的shell设置为Bash或zsh。但这不是你的变量没有被设置的原因。 – 2010-05-21 17:57:16