path_helper가 etc 디렉토리에서 경로를 로드하지 않습니다.

path_helper가 etc 디렉토리에서 경로를 로드하지 않습니다.

현재 저는 macOS Catalina를 사용하고 있지만 여러 버전이 동일합니다.

( /etc/zprofile또는 /etc/profile이전 버전에서 bash를 사용하는 경우) 기본적으로 다음과 같은 것이 있습니다.

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

추가적으로 파일을 만들었습니다 /etc/paths.d/android. 내용은

/Users/$USER/Library/Android/sdk/platform-tools
/Users/$USER/Library/Android/sdk/tools
/Users/$USER/Library/Android/sdk/tools/bin

그러나 터미널을 실행하면 터미널이 다음 폴더에서 바이너리를 찾을 수 없습니다.

zsh: command not found: adb

이유는 모르겠지만 해결책은 아래와 같이 경로 도우미 줄을 복사하는 것입니다.

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
    eval `/usr/libexec/path_helper -s`
fi

그렇다면 제 질문은 다음과 같습니다. 왜 이런 일이 발생하며 이 해결 방법은 실제로 어떻게 작동합니까?

업데이트할 때마다 제거되기 때문에 해결 방법이 지겨워졌습니다.


** 편집하다**

중복 없음:

PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Users/\$USER/Library/Android/sdk/platform-tools:/Users/\$USER/Library/Android/sdk/tools:/Users/\$USER/Library/Android/sdk/tools/bin:/Users/\$USER/Library/Flutter/bin:/Applications/Wireshark.app/Contents/MacOS:/Users/$USER/Library/Android/sdk/platform-tools:/Users/$USER/Library/Android/sdk/tools:/Users/$USER/Library/Android/sdk/tools/bin:/Users/$USER/Library/Flutter/bin"; export PATH;
print -lr -- $path[@]
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Applications/VMware Fusion.app/Contents/Public
/Users/$USER/Library/Android/sdk/platform-tools
/Users/$USER/Library/Android/sdk/tools
/Users/$USER/Library/Android/sdk/tools/bin
/Users/$USER/Library/Flutter/bin
/Applications/Wireshark.app/Contents/MacOS

중복된 항목이 있습니다.

PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Users/\$USER/Library/Android/sdk/platform-tools:/Users/\$USER/Library/Android/sdk/tools:/Users/\$USER/Library/Android/sdk/tools/bin:/Users/\$USER/Library/Flutter/bin:/Applications/Wireshark.app/Contents/MacOS:/Users/$USER/Library/Android/sdk/platform-tools:/Users/$USER/Library/Android/sdk/tools:/Users/$USER/Library/Android/sdk/tools/bin:/Users/$USER/Library/Flutter/bin:/Users/guness/Library/Android/sdk/platform-tools:/Users/guness/Library/Android/sdk/tools:/Users/guness/Library/Android/sdk/tools/bin:/Users/guness/Library/Flutter/bin"; export PATH;
print -lr -- $path[@]
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Applications/VMware Fusion.app/Contents/Public
/Users/$USER/Library/Android/sdk/platform-tools
/Users/$USER/Library/Android/sdk/tools
/Users/$USER/Library/Android/sdk/tools/bin
/Users/$USER/Library/Flutter/bin
/Applications/Wireshark.app/Contents/MacOS
/Users/guness/Library/Android/sdk/platform-tools
/Users/guness/Library/Android/sdk/tools
/Users/guness/Library/Android/sdk/tools/bin
/Users/guness/Library/Flutter/bin

답변1

해결책으로서 이것이 제가 한 일입니다. 저는 여전히 대체 솔루션에 열려 있지만 참고용으로 여기에 제 솔루션을 올려 놓았습니다.

if [ -x /usr/libexec/path_helper ]; then
    paths=`/usr/libexec/path_helper -s`
    eval ${paths//'\$USER'/$'$USER'}
fi

path_helper이는 첫 번째 호출이 다음과 같이 이스케이프된 문자열을 사용하여 경로 변수를 생성하기 때문입니다 . /Users/\$USER/Library그리고 내 해결 방법은 평가하기 전에 이스케이프를 해제하는 것이었습니다.


그래도 고마워요@Gilles "그러니 악한 행동은 그만하세요"문제를 파악하도록 도와주세요.

관련 정보