2014-06-09 5 views
3

무언가 ctags를 사용하고 싶습니다. 그러나, OS X 10.9에 기본은 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ctagsOS X 명령 줄에서 잘못된 ctag가 호출되었습니다.

내가 쉽게 sudo port install ctags 와 MacPorts의에서 풍부한 ctags를 얻을 수 있습니다, 다른 바이너리를 호출 할 것으로 보인다 내 경로는 새의 사용할 수 있도록 올바르게 설정 것 같다 /opt/local/bin 이진 (내 경로의 첫 번째 위치)

$ which ctags 
/opt/local/bin/ctags 

그러나, ctags을 실행하는 것은 여전히 ​​XCode.app 내부 버전을 호출합니다. 나는 물론 which ctags 을 사용하여 전체 경로와 올바른 바이너리를 부르지 만, 나는 그것이해야처럼 작동하는 경로가 보이지 않는 이유에 대한 혼란 스러워요 수 있습니다.

which의 결과는 실제로이 경우에 실행되는 바이너리 지정하지 않는 이유는 무엇입니까?

업데이트 : 새로운 bash 쉘 시작 문제를 해결. 아마도 실행 파일의 이름이 어딘가에 캐시되었지만, 앞으로이 문제가 발생하지 않게하려면 어떻게해야합니까?

답변

8

당신은 쉘 명령의 위치를 ​​캐싱을 방지 할 수 이는 일반적으로 성능상의 이유로 수행됩니다. 그러나 셸이 필요할 때마다이 캐시를 새로 고칩니다. bash을 사용하면 hash 명령을 사용하여이 명령 캐시를 조작 할 수 있습니다. 실행 :

hash mycommand 

것은 쉘이 mycommand의 저장 위치를 ​​업데이트하게됩니다. 예를 들어, 내 $PATH 시작이 함께있는 경우 :

$HOME/bin/A:$HOME/bin/B 

내가/빈/B $ HOME에 mycommand라는 판매 스크립트를 넣어 :

#!/bin/sh 
echo This is B. 

그리고 mycommand 실행을, 내가 얻을 :

$ mycommand 
This is B. 

그때 $HOME/bin/A에 같은 이름의 스크립트를 작성하는 경우 :

$ hash mycommand 
$ mycommand 
This is A. 

: 나는 다음 hash 명령을 사용하는 경우, 우리는 bash이 위치를 업데이트 참조

$ mycommand 
This is B. 

:

#!/bin/sh 
echo This is A. 

그리고 우리가 bash이 캐시 위치를 사용하고 있음을 참조 mycommand 실행 PATH 환경 변수를 변경하면 bash은 바이너리의 캐시 된 위치를 잊어 버리게됩니다.

+0

학습 결과 - 맹목적으로 그 결과를 신뢰하지 마십시오! –

관련 문제