일부 프로세스가 $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이 자동 구성을 제공하는)과 데몬(특히 관리되지 않는 데몬) 사이에 눈에 띄는 분할이 있습니다. 애플에서).

실제로, 일부 사용자가 무작위 패키지를 설치하여 가지고 놀다가 갑자기 네트워크 데몬이 잘못된 경로에서 잘못된 도구를 호출하기 때문에 네트워크 데몬이 새 경로를 선택하는 것은 매우 나쁠 수 있습니다. 또는 네트워크 데몬일 수도 있습니다. 시스템 전체 경로 시스템의 소프트웨어 X가 아닌 특정 버전의 소프트웨어 X가 필요합니다.

(그런데 나는 모든 곳에서 완전히 비활성화 /usr/libexec/path_help하고 PATH수동으로 설정했지만 그런 식으로 작업하면 어떤 문제가 발생하는지 어느 정도 알고 있습니다.)

관련 정보