我怎样才能以这种方式设置我的 crontab 环境,以便它可以访问内置的 BASH 变量,例如 $HOME、$PWD、$OLDPWD、$USER、$PATH、$PS1 等,所以依赖这些变量的脚本可以在 crontab 环境中运行吗?这是采购一些我不知道的文件的问题,还是稍微复杂一些的问题?
最佳答案
这些变量总是按预期设置:HOME、PWD、USER。
如果您像这样安排脚本:
0 0 * * * /path/to/script.sh
脚本的第一行是#!/bin/bash
然后可能它将源~/.bashrc
但不是~/.bash_profile
或 ~/.profile
运行时。除此之外,您提到的变量应该按预期工作。例如,如果您在脚本中更改目录,则 OLDPWD
和 PWD
将更新。我看不出 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
将按字面意思进行。
关于linux - crontab:获取BASH内部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20600152/