활기찬 ctags를 사용하고 싶습니다. 그러나 OS X 10.9에서 기본값은 다른 바이너리를 호출하는 것 같습니다./Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ctags
나는 쉽게 MacPorts에서 풍부한 ctag를 얻을 수 sudo port install ctags
있으며 내 경로는 /opt/local/bin
(내 경로의 첫 번째 위치)에서 새 바이너리를 사용할 수 있도록 올바르게 설정된 것 같습니다.
$ which ctags
/opt/local/bin/ctags
그러나 실행하면 ctags
여전히 XCode.app
. 물론 which ctags
전체 경로로 올바른 바이너리를 사용 하고 호출 할 수 있지만 경로가 제대로 작동하지 않는 이유에 대해 혼란 스럽습니다.
이 경우 결과가 which
실제로 어떤 바이너리가 실행되는지 지정하지 않는 이유는 무엇 입니까?
업데이트 : 새 bash 셸을 시작하면 문제가 해결되었습니다. 아마도 실행 파일의 이름이 어딘가에 캐시되어 있었는데, 앞으로 이런 일이 발생하지 않도록하려면 어떻게해야합니까?
쉘이 명령의 위치를 캐싱하는 것을 막을 수는 없습니다 . 이것은 일반적으로 성능상의 이유로 수행됩니다. 그러나 요청시 쉘이이 캐시를 새로 고치도록 강제 할 수 있습니다 . 를 사용 bash
하면 hash
명령을 사용하여이 명령 캐시를 조작 할 수 있습니다. 달리는:
hash mycommand
셸이에 대한 저장된 위치를 업데이트하도록합니다 mycommand
. 예를 들어, 다음으로 $PATH
시작하는 경우 :
$HOME/bin/A:$HOME/bin/B
그리고 mycommand
$ HOME / bin / B에 판매 스크립트를 넣었습니다 .
#!/bin/sh
echo This is B.
그리고 실행 mycommand
하면 다음을 얻습니다.
$ mycommand
This is B.
나는 그 같은 이름의 스크립트를 작성하는 경우 $HOME/bin/A
:
#!/bin/sh
echo This is A.
그런 다음 실행 하면 캐시 된 위치를 사용하고 mycommand
있음을 알 수 bash
있습니다.
$ mycommand
This is B.
그런 다음 hash
명령 을 사용 bash
하면 위치 업데이트가 표시됩니다.
$ hash mycommand
$ mycommand
This is A.
PATH
환경 변수를 변경하면 bash
바이너리의 캐시 된 위치를 잊어 버릴 수도 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다