MacOS优胜美地:在/ Library / LaunchDaemon中设置PATHvariables是否工作?

我使用Yosemite的/ Library / LaunchDaemons中的plists启动了一个用python编写的东西,我希望它运行一些scripots。 而且似乎没有把PATH从plist文件中提取出来。 例如,如果我在/Library/LaunchDaemons/com.foo.foo.plist有这个

 <plist version="1.0"> <dict> <key>KeepAlive</key> <true/> <key>Label</key> <string>cz.foo.foo</string> <key>ProgramArguments</key> <array> <string>/opt/foomac/foo.py</string> </array> <key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string> </dict> <key>WorkingDirectory</key> <string>/opt/foomac/</string> <key>UserName</key> <string>administrator</string> <key>RunAtLoad</key> <true/> <key>SessionCreate</key> <false/> <key>StandardOutPath</key> <string>/var/log/foo/stdout.log</string> <key>StandardErrorPath</key> <string>/var/log/foo/stderr.log</string> </dict> </plist> 

和我的/opt/foomac/foo.py

 #!/usr/bin/env python import os print os.environ 

那么我希望它将/var/log/foo/stdout.log中的/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin显示为PATH 。 但是只有/usr/bin:/bin:/usr/sbin:/sbin显示在那里。

我也有/ usr / local / bin / usr / bin / bin / usr / sbin / sbin

/etc/launchd.conf中的/etc/paths和setenv PATH / usr / local / bin:/ usr / bin:/ bin:/ usr / sbin:/ sbin,但仍然无效。 launchctl getenv PATH什么都不显示。

我们发现,在优胜美地推出的PATHjoin了环境,但没有删除以前的一个。 以下代码:

 #include <stdio.h> int main(int argc, char * argv[], char * envp[]){ char ** a = envp; while (*a != NULL){ printf("%s\n", *a); a++; } return 0; } 

成功的PATH两次:

 PATH=/usr/bin:/bin:/usr/sbin:/sbin PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 

Python显然是第一个。 解决方法是从bash脚本运行一个程序,因为看起来bash使用最后一个。

另外:这几乎肯定是一个bug,环境不应该包含两个同名的项目。