Bash

安裝的程序執行檔從錯誤的位置執行

  • October 9, 2018

parcellite在 Ubuntu 中安裝(從http://parcellite.sourceforge.net/下載)

從源安裝後sudo make install,我可以看到它安裝在以下位置。

但是,當我嘗試執行它時,它會嘗試從另一條路徑執行它。這是為什麼?

user$ which parcellite
/usr/local/bin/parcellite

user$ parcellite -h
bash: /usr/bin/parcellite: No such file or directory

$PATH如下

/home/user/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

我嘗試如下更改執行檔的所有權。問題仍然存在。

user$ ls -l /usr/local/bin/parcellite 
-rwxr-xr-x 1 root root 452K Oct  7 21:00 /usr/local/bin/parcellite
user$sudo chown user:user /usr/local/bin/parcellite
user$ ls -l /usr/local/bin/parcellite 
-rwxr-xr-x 1 user user 452K Oct  7 21:01 /usr/local/bin/parcellite

我安裝了舊版本的 parcellite。但我在安裝新版本之前將其刪除。


更新:@Fox 的解決方案有效。但是任何想法為什麼which命令給出正確的路徑,儘管hash沒有被更新?

如果您安裝了一個版本,然後在其他地方安裝了另一個版本,那麼您的 shell 將記憶體(散列)原始路徑。您可以使用 清除此記憶體hash -r。然後下次執行該命令時,它將使用新路徑重新散列。

請注意,此記憶體不是全域的,如果您有多個正在執行的 shell,則必須更新它們中的每一個。

至於為什麼which看到正確的路徑,“為什麼不使用which是一個很好的資訊來源,但簡短的回答是這which是一個看不到 shell 路徑記憶體的外部命令。

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