一部のプロセスが $PATH を手動で設定するのはなぜですか?

一部のプロセスが $PATH を手動で設定するのはなぜですか?

次の行で始まる CGI スクリプトをデバッグしようとしていました:

#!/usr/bin/env python3

もちろん、問題は$PATHApache HTTPd と私のシェルの環境変数 (具体的には ) が異なっていたことです。

.profile調べてみると、シェルのシステム レベルでは、を$PATH呼び出してを設定することがわかりました。 を呼び出して、その出力を の出力と比較することで/usr/libexec/path_helperこれを検証しました。/usr/libexec/path_helperecho $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) は通常、シェルと同じ環境 (または同じ構成) を使用しないため、対話型シェル (Apple が自動構成を提供するもの) とデーモン (特に Apple によって管理されていないもの) の間には顕著な違いがあります。

実際には、ユーザーが試しにランダムなパッケージをインストールしたためにネットワーク デーモンが新しいパスを取得し、突然ネットワーク デーモンが間違ったパスから間違ったツールを呼び出すようになった場合、非常に悪い状況になる可能性があります...または、ネットワーク デーモンがシステム全体のパスのシステムからのものではなく、特定のバージョンのソフトウェア X を必要としている可能性があります...

(ちなみに、私はどこでも完全に無効にして手動で/usr/libexec/path_help設定していますPATHが、そのようにすることでどのような問題が発生するかは大体わかっています。)

関連情報