$ PATH는 나를 미치게한다


10

좋아, 이것이 멍청한 일이라면 사과하지만 아이디어가 부족합니다.

목표 : 앞에 추가 /usr/local/bin$PATH

문제 : $PATH 내가 원하는 것을하지 않거나 기대하지 않습니다

내가 여기에 어떻게 왔는가 : 나는 프로그램을 배우기 시작하고 싶었다. 그래서 나는 곤경에 빠지는 것을 편안하게 느끼고 있지만 많은 경험이 없다. fish친숙하기 때문에 쉘을 설치하고 homebrew기본 쉘 ( system prefs>users & groups>advanced) 로 설정했습니다 . 어느 시점에서 brew doctor설치가 모두 정결 한지 확인하기 위해 시스템 복사본 대신 설치를 사용할 수 있도록 /usr/local/bin전면으로 이동 하는 것이 좋습니다 . 파인 -하지만 사이 와 , 뭔가가 일어나고 그 것은 내 컨트롤 밖으로이었고, 나는 경로가 올바른 방법으로 배열 얻을 수 없었다.$PATHgitpath_helperfish$PATH

환경 : OSX 10.8.2, 10.7ish에서 업그레이드, xcode및 devtools가 설치되어 x11있고 homebrew, 및fish

자세한 정보는 : 나는 내 사용자의 기본 쉘 등을 설정 한 bash과를 통해 쉘의 다양한 시도 terminal.app- bash, fish, sh. 나는 /usr/local/bin맨 위로 이동 /etc/paths했지만 아무것도 변경되지 않았습니다. 나는 다양한 config.fish파일을 살펴보고 $ PATH로 엉망이되는 물건을 주석 처리했지만 도움이되지 않았습니다. 다음 파일이 있습니다 /etc/paths.d/.

./10-homebrew 포함 /usr/local/bin

./20-fish 포함 /usr/local/Cellar/fish/1.23.1/bin

./40-XQuartz 포함 /opt/X11/bin

나는 내에 추가 set +x했고 profile내가 시작할 때 terminal.app나는 얻는다 :

Last login: Mon Oct  1 13:31:06 on ttys000
+ '[' -x /usr/libexec/path_helper ']'
+ eval '/usr/libexec/path_helper -s'
++ /usr/libexec/path_helper -s PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/Cellar/fish/1.23.1/bin:/opt/X11/bin";
export PATH;
+ '[' /bin/bash '!=' no ']'
+ '[' -r /etc/bashrc ']'
+ . /etc/bashrc
++ '[' -z '\s-\v\$ ' ']'
++ PS1='\h:\W \u\$ '
++ shopt -s checkwinsize
++ '[' Apple_Terminal == Apple_Terminal ']'
++ '[' -z '' ']'
++ PROMPT_COMMAND='update_terminal_cwd; '
++ update_terminal_cwd
++ local 'SEARCH= '
++ local REPLACE=%20
++ local PWD_URL=file://Chriss-iMac.local/Users/c4
++ printf '\e]7;%s\a' file://Chriss-iMac.local/Users/c4 
Chriss-iMac:~ c4$

이 path_helper 실행처럼 보이는 그래서,하지만 실행 echo $PATH그물 나 /usr/bin:/bin:/usr/sbin:/sbin. 그래서 path_helper더 이상해야 할 일을하지 않는 것 같아요 ?

여기에 내가 이해하지 못하는 잘 정의 된 동작이 있거나 확실하지 않은 문제가 있다고 확신합니다. 도와주세요!


참고로 나는 그것을 fish만들어서 작동시킬 수 ~/.config/fish/config.fishset PATH /usr/local/bin $PATH있지만 여전히 path_helper제대로 작동하지 않아 $PATH불완전한 문제가 여전히 있습니다 . 또한 $PATH스크립트, GUI에서 시작된 앱 등에 대해서는 여전히 다른 문제가 있습니다 .
Chris4d

답변:


5

해결책:

시스템 전체 설정 또는 사용자 구성을 원하는지 선택하고 적절한 구성 파일을 편집하려면 fish와 함께 path_helper를 사용하지 마십시오.

fish는 / etc / profile을 제공하지 않으며, 시스템 전체 및 사용자 구성의 경우 각각 /etc/fish/config.fish 및 ~ / .config / fish / config.fish를 읽습니다 [1].

path_helper는 시스템 전체 프로필 파일 (sh, csh 및 해당 파생 파일)을 제공하는 쉘에 사용하기위한 것입니다. 10.7 이후 path_helper는 / etc / paths의 순서를 따르는 것으로 보이지만 AFAIR는 10.6에 없었으며 이에 대처하기가 더 어려웠습니다.

실제로 fish와 함께 path_helper를 사용하려면 -s-c 옵션 과 함께 sh 및 csh 구문 만 제공하므로 출력을 구문 분석해야합니다 .

같은 것

/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g'

일을해야합니다 :

[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization


큰! 이것은 내가 지금 가진 것입니다 : if status --is-login eval (/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g') end-물고기 2와 Mac OS 10.8.3에서 잘 작동합니다.
topskip

3

나는 /etc/paths.d, path_helper, & c.에 대해 전혀 모른다. 모두 나에게 과도한 합병증처럼 보이지만 ~ / .bashrc의 끝에서 다음과 같이하면된다.

 PATH=/usr/local/bin:$PATH

도움이 되었기를 바랍니다!


감사합니다 Aaron path_helper-OSX 전용 유틸리티 $PATH로 로그인 한 /etc/paths다음 에 읽음으로써 설정하는 것으로 가정합니다 /etc/paths.d/*. 어쨌든, 나는 당신의 제안이 나를 고쳐야한다는 것을 이해 bash하지만 실제로는 그것이 작동하기를 원합니다 fish(그리고 기대하지 않는 경우 시스템 전체에서 일관되게).
Chris4d

아 죄송합니다. 나는 OS X 사용자가 아니며, 더 안타깝지만 약간의 Google bashing 에서이 스택 오버플로 질문은 당신이 겪고있는 것과 더 비슷할 것 같습니다-다시 말하지만, OS X 사용자는 자신의 질문에 대한 빠른 (읽기 : 부주의 한) 모양으로 인해 bash에만 관심이 있다고 생각했기 때문에 응답했습니다. 모두 도움이
Aaron Miller

3

응답하고 스택 교환 사이트에서 다른 유사한 질문에 답변 한 모든 사람들에게 Aaron에게 감사드립니다. 후손을 위해 내가 알아 낸 것은 다음과 같습니다.

  1. path_helper/etc/profile구문 eval '/usr/libexec/path_helper -s'(아포스트로피가 실제로 백틱 인 경우)에 의해 에서 호출됩니다 . 더미처럼, 나는 백틱이 어떻게 작동하는지 알지 못했고 어떤 이유로 따옴표로 바꿨습니다. 이로 profile인해 로딩 이 중단 되었습니다 path_helper. 백 틱을 교체했으며 이제는 물론 작동합니다.
  2. set PATH /usr/local/bin $PATH내에서 사용 ~/.config/fish/profile.fish하면 선호하는 쉘에서 올바른 순서를 얻을 수 있지만 path_helper작동하는 한 중복 될 수 있습니다.
  3. 전체가 보장을 위해 $PATH등 스크립트 GUI 애플리케이션에 사용할 수 있습니다, 사이-던져 것으로 보인다 launchd.conf그리고 environment.plist아직도 그 일을 연구 ....

1
나는 10.8을 더 이상 읽지 않았지만 10.8은 더 이상 모든 앱에 경로를 표시하는 확실한 방법을 제공하지 않습니다. 특히 environment.plist를 더 이상 읽지 않는다는 것을 기억합니다. launchd.conf에 대해 모호하게 알고 있으므로 작동 할 수도 있지만 기사에서는 그렇지 않을 것이라고 생각합니다.
echristopherson

1
더 많은 후속 조치 : path_helper가 물고기에서 전혀 작동하지 않는 것처럼 보입니다. 호환되지 않는 csh 또는 bash 구문을 출력합니다. 대신 ~ / .config / fish / config.fish (물고기 시작 스크립트)를 사용하여 /etc/paths.d/*를 cat하고 $ PATH에 추가 할 수 있습니다. 누군가를 돕는 희망!
Chris4d

내 대답을 읽었습니까? 추적 관찰 4 개월 전부터있었습니다.
anddam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.