我安装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 路径缓存的外部命令。