Bash
安裝的程序執行檔從錯誤的位置執行
我
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 路徑記憶體的外部命令。