현재 저는 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 "그러니 악한 행동은 그만하세요"문제를 파악하도록 도와주세요.