Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Mac OS X上的cron命令中未通过源命令扩展路径_Macos_Shell_Cron_Crontab - Fatal编程技术网

Macos Mac OS X上的cron命令中未通过源命令扩展路径

Macos Mac OS X上的cron命令中未通过源命令扩展路径,macos,shell,cron,crontab,Macos,Shell,Cron,Crontab,我刚刚安装了Mac OS X。我不想使用launchd。出于某种原因,当我在cron命令中生成.bash_概要文件时,路径不会更新。但是,当在shell上运行相同的cron命令时,路径会更新。在cron命令中手动更新路径也可以 因此,此cron行更新路径: 34 03 * * * PATH=~/anaconda/bin:$PATH ; echo $PATH 而这个cron行: 34 03 *

我刚刚安装了Mac OS X。我不想使用launchd。出于某种原因,当我在cron命令中生成.bash_概要文件时,路径不会更新。但是,当在shell上运行相同的cron命令时,路径会更新。在cron命令中手动更新路径也可以

因此,此cron行更新
路径

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

source
内置命令无法按您希望的方式从cron运行,因为cron守护进程从主目录启动子shell来运行作业
source
命令仅防止在该子进程内派生另一个子shell


您应该从cron启动shell脚本,例如

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

script.sh
中,您应该设置所需的环境。

这里有一个脚本,您可以使用它来生成.bashrc或.bash_配置文件,然后执行命令行:

#!/bin/bash -x

source ~/.bash_profile

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

eval $@
#!/bin/bash -x

source ~/.bash_profile

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

eval $@