linux - crontab:获取BASH内部变量

标签 linux bash unix crontab

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

最佳答案

这些变量总是按预期设置: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 将按字面意思进行。

关于linux - crontab:获取BASH内部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20600152/

相关文章:

glibc 中的更改不起作用

linux - 从套接字写入输出

linux - Bash 并行 dd 和 mkfs

python - 使用环境变量在python中调用子进程

Linux/Unix : script starting some command if some directory tree exists

linux - 我可以将 Bash 提示符的输入颜色更改为与终端默认值不同的颜色吗?

linux - 如何在 shell 中创建别名以转到父目录

java - 将 linux 命令行输出发送到另一个 screen

Bash getopts 删除最后一个参数

java - 对记录进行排序但在 Linux 和 Java 中将标题保持在顶部