path_helper 및 zsh

path_helper 및 zsh

PATHApple은 쉘 구성 파일 끝에 점점 더 많은 변수 변형을 밀어넣는 대신 디렉토리 에서 경로 목록을 읽어 변수를 자동으로 확장 path_helper할 수 있도록 바이너리를 만들었다는 내용을 읽었습니다.PATH/etc/paths.d/

또한 - 이 파일은 csh 및 bash( -c-s해당 플래그)에 대한 출력만 생성합니다. 출력이 없습니다 zsh(zsh는 bash와 어느 정도 호환되지만 이해합니다).

zsh를 사용하고 있습니다. 내 /etc/zshenv파일에는 다음 줄이 포함되어 있습니다.

# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

터미널이나 새 탭을 열면 프로세스가 완료되는 데 약 0.5초 정도 걸립니다. 하나의 파일에만 단일 경로( /usr/X11/bin)가 있습니다. 완전히 삭제 하면 /etc/zshenv얼마나 많은 위험을 감수해야 합니까 ? 위 경로를 my 또는 file 에 입력하면 .zshrc충분합니까 .zshenv?

답변1

superuser.com에서 비슷한 질문을 본 적이 있나요? 연결블로그 게시물말했습니다(거의 전체 게시물을 인용하고 있습니다).

/usr/libexec/path_helperMac OS X에서는 로그인 셸을 생성할 때마다 이를 실행하는데, 이는 매우 느립니다. (특히 저는 Slow 를 고려합니다 [[ "$NEWPATH" = *(*:)${p}*(:*) ]].) 터미널 창이 열리는 데 약 4초 정도 걸립니다. /etc/paths.d에서 파일을 삭제하고 해당 내용을 .bash_profile의 $PATH에 직접 배치하면 이제 터미널 창이 즉시 로드됩니다.

토론에는 링크도 포함되어 있습니다.Perl로 작성된 교체,github.com/mgprot/path_helper(얼마나 빠른지는 모르겠습니다.)

편집하다:위 블로그 게시물의 댓글을 보면 -패치path_helper이는 문제를 해결하는 또 다른 방법이어야 합니다.

답변2

나는 다음이 새 터미널을 시작하는 속도에 영향을 미치지 않는다는 것을 알고 있습니다. 그러나 그것이 나를 물었기 때문에 나는 두 센트를 던질 것이라고 생각했습니다.

나는 이 호출(path_helper에 대한)이 zshenv(로그인 쉘뿐만 아니라 모든 쉘에 대해 호출됨)에 있다고 생각하는데 이는 실제로 문제가 있습니다. 다른 쉘의 경우 path_helper 호출은 /etc/profile 또는 /etc/csh.login에 있으며 로그인 쉘에만 호출됩니다.

zsh에서 "screen" 유틸리티를 실행하면 문제가 됩니다. 'screen'은 로그인 쉘을 시작하지 않지만 호출 쉘에서 환경을 상속합니다. 하지만 여전히 /etc/zshenv 및 bu 확장 path_helper를 호출합니다.

실제로 path_helper는 /etc/paths.d에서 PATH 후보를 얻을 뿐만 아니라 호출 시 기존 PATH가 존재하는 경우 해당 PATH에서 적극적으로 작동합니다. 즉, /etc/에 있는 구성 요소를 제거합니다. paths 및 /etc/paths.d를 앞에 배치합니다. 따라서 ${USER}/bin 또는 /usr/local/bin을 PATH 시작 부분에 넣으면(자신의 프로그램을 먼저 찾으려고 하기 때문에) Screen 세션에서는 작동하지 않습니다.

내 자신의 문제를 해결하기 위해 내가 제안하는 것은 /etc/zshenv의 이름을 /etc/zprofile(현재 존재하지 않음)로 바꾸는 것입니다. 그러나 이것이 바람직하지 않은 영향을 미칠까 걱정됩니다...가능한이것이 OS X의 zsh 구현이 /etc/zshenv에 이 호출을 갖는 이유입니다. 다음 OS가 출시되면 분명히 깨질 것이고 모든 수정 사항을 잊어버릴 것입니다.

다른 사람이 이것을 본 적이 있나요? 아니면 어떤 아이디어가 있나요?

관련 정보