PATH未通过Mac OS X上的cron命令中的source命令进行扩展

时间:2014-09-25 07:43:46

标签: macos shell cron crontab

我刚刚安装了Mac OS X.我不想使用launchd。出于某种原因,当我在cron命令中获取.bash_profile时,PATH不会更新。但是,当在shell上运行相同的cron命令时,PATH会更新。也可以手动更新cron命令中的PATH。

所以这个cron行更新了PATH

34       03     *              *       *  PATH=~/anaconda/bin:$PATH ; echo $PATH

虽然这个cron行:

34       03     *              *       *  source $HOME/.bash_profile ; echo $PATH

显示了这个结果:

From anicca@terrences-mbp.home  Thu Sep 25 03:40:01 2014
X-Original-To: anicca
Delivered-To: anicca@terrences-mbp.home
From: anicca@terrences-mbp.home (Cron Daemon)
To: anicca@terrences-mbp.home
Subject: Cron <anicca@terrences-mbp> source $HOME/.bash_profile ; echo $PATH
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=anicca>
X-Cron-Env: <USER=anicca>
X-Cron-Env: <HOME=/Users/anicca>
Date: Thu, 25 Sep 2014 03:40:00 -0400 (EDT)

/Users/anicca/bin:/usr/local/bin:/usr/bin:/bin

但是shell中的相同命令确实会更新PATH

[~/prg/binary-martingale/src]$ source $HOME/.bash_profile ; echo $PATH
/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
[~/prg/binary-martingale/src]$ 

3 个答案:

答案 0 :(得分:2)

source内置命令无法按照您想要的方式运行,因为 cron守护程序会从您的HOME目录启动子shell 来运行您的作业。 source命令仅阻止在该子进程中分支另一个子shell。

An introduction to cron

答案 1 :(得分:0)

你应该从cron开始你的shell脚本,例如

34       03     *              *       *  /path/to/my/script.sh

并在script.sh中设置所需的环境。

答案 2 :(得分:0)

这是一个可用于获取.bashrc或.bash_profile然后执行命令行的脚本:

#!/bin/bash -x

source ~/.bash_profile

echo "CMDLINE: $@"
echo "PATH: $PATH"

eval $@