我通常使用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