为什么有些进程要手动设置 $PATH?

为什么有些进程要手动设置 $PATH?

我试图调试以以下行开头的 CGI 脚本:

#!/usr/bin/env python3

当然,问题是$PATHApache HTTPd 和我的 shell 的环境变量(特别是 )不同。

.profile经过一番挖掘,我发现shell 的系统级$PATH通过调用/usr/libexec/path_helper.我通过调用/usr/libexec/path_helper并将输出与 的输出进行比较来验证这一点echo $PATH

Apache HTTPd 的路径与此值不同。这使我假设 HTTPd 手动设置了值$PATH

我的问题是,为什么?为什么要手动设置流程$PATH?我认为这/usr/libexec/path_helper是某种系统标准,不是吗?

所以,问题是,为什么要$PATH手动设置进程,而不是调用某种系统级标准,这/usr/libexec/path_helper看起来像是系统级标准。

答案1

/usr/libexec/path_helper我只在 Mac OS X 上见过; unix 上的守护进程(还有 cron)通常不使用与 shell 相同的环境(也不是相同的配置),因此交互式 shell(Apple 为其提供了一些 automagic 配置)和守护进程(尤其是那些不受管理的守护进程)之间存在明显的区别由苹果公司提供)。

实际上,如果网络守护进程选择了一个新路径,因为某些用户安装了一些随机包来玩,然后突然网络守护进程从错误的路径调用错误的工具......或者网络守护进程可能会非常糟糕需要软件 X 的特定版本,而不是来自系统范围路径系统的版本...

(顺便说一句,我在任何地方都完全禁用/usr/libexec/path_help并手动设置PATH,但我或多或少知道这样做会遇到什么麻烦。)

相关内容