Linux

‘which’ 報告一件事,實際命令是另一件事

  • January 10, 2014

我正在執行 Cmake v 2.8.7 附帶的 Ubuntu 12.04。

我需要更新的 CMake,所以我下載了 12.8.12.1 的原始碼,按照說明進行建構和安裝。最後一步,make install我執行了sudoed。

./bootstrap
make
sudo make install

現在我想執行它,但是我發現cmake從命令行執行時仍然呼叫舊版本:

jdibling@hurricane:/$ cd /; cmake --version; which cmake
cmake version 2.8.7
/usr/local/bin/cmake
jdibling@hurricane:/$ 

奇怪,我想。所以我su從那裡嘗試:

root@hurricane:~# cd /; cmake --version; which cmake
cmake version 2.8.12.1
/usr/local/bin/cmake
root@hurricane:/# 

為什麼which報同一個目錄,卻cmake --version報不同版本?如何找到新cmake的實際安裝位置?

按照建議,我跑了type

jdibling@hurricane:/tmp/cmake-2.8.12.1$ type cmake
cmake is hashed (/usr/bin/cmake)
jdibling@hurricane:/tmp/cmake-2.8.12.1$ sudo su -
root@hurricane:~# type cmake
cmake is /usr/local/bin/cmake
root@hurricane:~# 

您應該使用該type命令來了解其名稱下的真正含義,即:

type cmake

正如您所經歷的那樣,這可能是alias執行不同版本的cmake,或者俱function有類似行為的,或者最後是以前的hashed命令,而該命令不再是您的 中的第一個命令PATH

引用自:https://unix.stackexchange.com/questions/108752