我在Ubuntu中安装了parcellite (从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没有被更新?
发布于 2018-10-09 03:46:04
如果您安装了一个版本,然后在其他地方安装了另一个版本,那么您的shell将缓存(散列)原始路径。您可以使用hash -r清除此缓存。然后,下次运行该命令时,它将使用新路径重新散列。
请注意,此缓存不是全局缓存,如果您有几个正在运行的shell,则必须更新每个shell。
至于为什么which看到正确的路径,“为什么不使用which“是一个很好的信息来源,但简单的回答是,which是一个外部命令,它看不到shell的路径缓存。
https://unix.stackexchange.com/questions/474116
复制相似问题