為什麼有些行程要手動設定 $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,但我或多或少知道這樣做會遇到什麼麻煩。)

相關內容