安装的程序可执行文件从错误的位置运行

安装的程序可执行文件从错误的位置运行

我安装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没有更新吗?

答案1

如果您安装了一个版本,然后在其他地方安装了另一个版本,那么您的 shell 将缓存(散列)原始路径。您可以使用 清除此缓存hash -r。然后,下次运行该命令时,它将使用新路径重新哈希。

请注意,此缓存不是全局的,如果您有多个正在运行的 shell,则必须更新每个 shell。

至于为什么which看到正确的道路,“为什么不使用which是一个很好的信息来源,但简短的答案是,这which是一个看不到 shell 路径缓存的外部命令。

相关内容