
我試圖調試以以下行開頭的 CGI 腳本:
#!/usr/bin/env python3
當然,問題是$PATH
Apache 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
,但我或多或少知道這樣做會遇到什麼麻煩。)