Crontab:访问BASH内部变量

时间:2013-12-15 21:40:24

标签: linux bash unix crontab

如何以这样的方式设置我的crontab环境,以便它可以访问内置的BASH变量,例如$ HOME,$ PWD,$ OLDPWD,$ USER,$ PATH,$ PS1等,所以依赖这些变量的脚本可以在crontab环境中运行吗?这是一个我不知道的文件来源,还是稍微复杂一些?

2 个答案:

答案 0 :(得分:2)

这些变量始终按预期设置:HOME,PWD,USER。

如果您按照以下方式安排脚本:

0 0 * * * /path/to/script.sh

并且脚本的第一行是#!/bin/bash,然后可能它会在运行时来源~/.bashrc但不会~/.bash_profile~/.profile。除此之外,您提到的变量应该按预期工作。例如,如果您更改脚本中的目录,则会更新OLDPWDPWD。我不知道PS1在脚本中的相关性如何。

另一方面,如果在你的crontab中你想要安排一个命令而你想要.bashrc来源,那么你必须这样写:

0 0 * * * . .bashrc; somecmd
# or:
0 0 * * * bash -c somecmd

另请注意,尽管您可以在crontab中设置变量,但它与shell脚本中的变量不同。例如,这些工作:

SHELL = /bin/bash
SHELL=/bin/bash
PATH=~/bin:/usr/bin/:/bin

另一方面,这不符合您的期望:

PATH=$HOME/bin:$PATH

正如man 5 crontab中所述,未解析值(=之后的任何内容),因此本示例中的$HOME$PATH将按字面意思进行。

答案 1 :(得分:0)

尝试使用“The EasyCronjobHandler”http://codecanyon.net/item/the-easycronjobhandler/6296537