"잘못된" 실행 파일이 실행되는 이유는 무엇입니까? [복사]

"잘못된" 실행 파일이 실행되는 이유는 무엇입니까? [복사]

나는 달리려고 노력하고있다.파이썬~에서세게 때리다(버전 4.4.19) 명령줄.

ipython저는 Python 개발자로서 virtualenv다양한 경로에 다양한 Python 버전이 설치되어 있으므로 어떤 버전을 실행하고 있는지 아는 것이 중요합니다. 따라서 $PATH내가 변경하면 virtualenv항상 변경되며 이는 다음의 일반적인 값이 됩니다 PATH.

$ echo $PATH
/Users/jab/.virtualenvs/tools/bin:/Users/jab/bin:/Users/jab/src/git/hub/jab/bin:/usr/local/gnu:/bin:/usr/local/bin:/usr/bin

여기서 중요한 세부 사항은 첫 번째 항목이 " /Users/jab/.virtualenvs/tools/bin"이고 파일이 /Users/jab/.virtualenvs/tools/bin/ipython존재한다는 것입니다.

$ ls -l /Users/jab/.virtualenvs/tools/bin/ipython
-rwxr-xr-x 1 jab staff 252 May 11 15:18 /Users/jab/.virtualenvs/tools/bin/ipython

예상대로 파일이 " " 명령으로 which실행됨을 의미합니다.$ ipython

$ which ipython
/Users/jab/.virtualenvs/tools/bin/ipython

$ $(which ipython) -c "import sys; print(sys.executable)"
/Users/jab/.virtualenvs/tools/bin/python

그러나 이는 사실이 아니며 대신 /usr/local/bin/ipython실행됩니다.

$ ipython -c "import sys; print(sys.executable)"
/usr/local/bin/python3

bash내가 무시 $PATH되고 "잘못된" 실행 파일을 사용하는 이유를 누군가 설명할 수 있습니까 ? 무엇을 변경해야 합니까?(내 bashrc, 또는 내 시스템( macOS 10.12.3))에서 bash가 내가 결정한 순서대로 실행 파일을 선택하도록 합니다 $PATH.

참고: 이는 중복되지 않습니다.내 경로에 있는 프로그램인데도 Bash가 프로그램을 찾지 못합니다., 이는 PATH에 찾는 방법을 묻기 때문입니다.어느프로그램, 그리고 질문은 왜잘못된프로그램을 찾았습니다.

답변1

이전 bash 세션에서 "잘못된" 실행 파일이 호출되었고 Bash가 해당 경로 이름을 기억한 것 같습니다(이것은 정상입니다. 이 기능은 PATH알려진 명령에 대한 추가 조회를 방지합니다).

이 문제를 해결하려면 다음을 실행해야 합니다.

$ hash -d ipython

이렇게 하면 기억된 위치가 지워지므로 ipythonBash는 명령을 찾기 위해 다시 검색해야 합니다 PATH(이 시점에서 올바른 실행 파일을 찾습니다).

관련 정보