Bash
為什麼執行“錯誤”的執行檔?
我正在嘗試從bash(版本)命令行執行ipython 。
4.4.19
作為一名 Python 開發人員,我
ipython
在各種 s’ 路徑中安裝了各種版本的各種版本virtualenv
,因此了解我正在執行的版本很重要。因此,$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 按照 my 確定的順序選擇執行檔$PATH
。注意:這不是重複的Bash is not find a program 即使它在我的路徑上,因為它詢問 PATH 如何查找任何程序,而這個問題是為什麼找到錯誤的程序。
看起來在您的 bash 會話中的某個時間,“錯誤”的執行檔被呼叫,然後它的路徑名被 Bash 記住(這是正常的,這樣的功能可以防止
PATH
對已知命令的進一步查找)。要解決此問題,您應該執行
$ hash -d ipython
這清除了 的記憶位置
ipython
,因此 Bash 需要PATH
再次搜尋以找到該命令(這就是它找到正確執行檔的時候)。