Почему некоторые процессы устанавливают $PATH вручную?

Почему некоторые процессы устанавливают $PATH вручную?

Я пытался отладить свой CGI-скрипт, который начинался со строки:

#!/usr/bin/env python3

Конечно, проблема была в том, что переменные среды (в частности, $PATH) Apache HTTPd и моей оболочки различались.

После некоторых раскопок я обнаружил, что системный уровень .profileдля оболочки задается $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; демоны (а также cron) в Unix обычно не используют ту же среду (и ту же конфигурацию), что и оболочка, поэтому существует заметное разделение между интерактивными оболочками (для которых Apple предоставляет некоторую автоматическую настройку) и демонами (особенно теми, которые не управляются Apple).

На самом деле, может быть очень плохо, если сетевой демон выбрал новый путь, потому что какой-то пользователь установил какой-то случайный пакет, чтобы поиграться с ним, а затем сетевой демон внезапно вызывает неправильный инструмент из неправильного пути... или, может быть, сетевому демону нужна определенная версия программного обеспечения X, а не та, что из общесистемной системы путей...

(Кстати, я полностью отключаю /usr/libexec/path_helpи настраиваю PATHвсе вручную везде, но я более или менее понимаю, какие проблемы меня ждут, если я буду делать это таким образом.)

Связанный контент